【发布时间】:2012-08-28 16:45:29
【问题描述】:
我有一个调用类中的方法的 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() );,原因是“调用的目标已抛出异常。”
如果我不报告进度,一切正常。有谁知道为什么?我的猜测是这与线程有关,但我不知道如何。
【问题讨论】:
-
你确定“w”不为空吗?
-
我认为您需要显示计算代码。
-
这可能是您的
ProgressChanged事件处理程序中的错误。如果你清空它,它会起作用吗?此外,知道异常的类型和完整的堆栈跟踪肯定会有所帮助。 -
请提供更多代码或内部异常详情
-
您是否将 bw.WorkerReportsProgress 设置为 true?你有没有钩住事件处理程序?
标签: c# backgroundworker