2

我有一个调用类中的方法的 BackgroundWorker。该方法被赋予对 BackgroundWorker 的引用,以便它可以报告其进度。此伪代码显示了大纲:

void BackgroundWorker_DoWork( object sender )
{
    BackgroundWorker w = sender as BackgroundWorker;
    var c = new ProcessingClass()
    c.someMethod( w )
}

class ProcessingClass()
{
    someMethod( BackgroundWorker w )
    {
        w.ReportProgress(50)
        //calculations...
    }
}

问题是在报告进度后进行“计算”时,程序会崩溃。调试器跳转到Application.Run( new frmMain() );启动“程序”类,原因是“异常已被调用的目标抛出”。

如果我不报告进度,一切正常。有谁知道为什么?我的猜测是这与线程有关,但我不知道如何。

4

2 回答 2

3

只是一些建议:

1.) 检查异常的InnerException属性TargetInvocationException

2.) 将 Visual Studio 配置为在抛出异常后立即停止:

在此处输入图像描述

这应该有助于更接近错误。

于 2012-08-28T08:36:05.637 回答
1

也许您假设 ReportProgress 正在阻塞并准备了代码// calculations ...所依赖的某些内容。并不是说它没有阻塞:

对 ReportProgress 方法的调用是异步的并立即返回。

http://msdn.microsoft.com/en-us/library/ka89zff4.aspx

于 2012-08-28T08:45:29.590 回答