Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BackgroundWorker.ReportProgress中断方法_C#_Wpf_Progress Bar_Backgroundworker - Fatal编程技术网

C# BackgroundWorker.ReportProgress中断方法

C# BackgroundWorker.ReportProgress中断方法,c#,wpf,progress-bar,backgroundworker,C#,Wpf,Progress Bar,Backgroundworker,似乎无论我在BackgroundWorker上调用ReportProgress,该方法的处理都会停止,因此我的工作永远不会完成。例如: int numQuals = this.Model.Names.Count(); int currentQual = 0; int fivePercent = (int)(numQuals * .05); foreach (var qualName in this.Model.Names) { if ((worker != null) &&

似乎无论我在BackgroundWorker上调用ReportProgress,该方法的处理都会停止,因此我的工作永远不会完成。例如:

int numQuals = this.Model.Names.Count();
int currentQual = 0;
int fivePercent = (int)(numQuals * .05);
foreach (var qualName in this.Model.Names)
{
    if ((worker != null) && ((currentQual % fivePercent == 0)))
    {
        worker.ReportProgress((int) (((float)++currentQual / numQuals) * 100));
    }

    // This next line never processes. I can debug and it will 
    // break at the ReportProgress line but won't ever break here
    this.myContainer.Add(...
}

有人知道这是为什么吗?

您是否设置了worker.WorkerReportsProgress=true?否则,后台工作人员将异常终止,工作将无法完成。

我建议将您的计算逻辑分离到另一行。我讨厌看到来自其他开发人员的类似内联的东西。它更难阅读,也更难调试(正如您的问题所指出的)

如果您在do work方法中,则worker永远不应为null。尽管我确实建议执行空检查——如果这里存在空值,那么其他的东西就大错特错了

 if ((worker != null) && ((currentQual % fivePercent == 0)))
 {
        object result =  ((float)++currentQual / (float)numQuals) * 100;
        int resultint = 0;
        if(Int32.TryParse(result.ToString(), out resultint))
        {
            worker.ReportProgress(Convert.ToInt32(result));
        }
 }

调试+异常,勾选抛出复选框。并添加代码来处理RunWorkerCompleted事件处理程序中的e.Error。您发布的内容不会告诉我们任何信息。把你的密码贴出来怎么样ReportProgress@Ramhound例如他不能。是.NET Framework的一部分。所有的
ReportProgress
操作都是引发
ProgressChanged
事件。如果这是阻塞,那么他的事件处理程序就是阻塞。我们需要查看他的事件处理程序。@Kristip:然后您必须向调试程序进行检查。请注意,如果ReportProgress事件中有任何错误代码,这将中断后台工作程序的执行。这意味着错误要么在调用ReportProgress的行中(除零或类似的内容),要么在ReportProgress eventhandler中。是的,事实证明在eventhandler中有一个愚蠢的错误导致了异常。这就是为什么我不应该偷懒,总是确保我检查e.错误,正如@Hans Passant所说的。