这是我正在使用的代码:
try
{
mainWorker = new BackgroundWorker();
mainWorker.DoWork += (sender, e) =>
{
try
{
//stuff I want to have happen in the background
...
//I want to step through the lines in this try block
}
catch
{
//exception not being caught
}
};
mainWorker.RunWorkerCompleted += (sender, e) =>
{
//code to let user know that the background work is done
...
};
mainWorker.RunWorkerAsync();
mainWorker.Dispose();
}
catch
{
//exception not being caught
}
我没有看到任何异常被抛出。我在 DoWork 的 try 块内设置了一个断点。有时它会遇到断点,但在单步执行一定数量的行后,程序就会结束。它并不总是以同一行代码结束。有时它根本没有到达断点。
如果我消除后台工作人员,代码将正常执行。
我以前没有实现过后台工作人员,我正在尝试找出我缺少的东西阻止我单步执行代码。
编辑:忘记提及,如果我注释掉 Dispose() 它仍然不会执行。
尝试添加Console.Readline();
before mainWorker.Dispose();
。您的应用程序可能会在BackgroundWorker 完成其工作之前停止。
BackgroundWorker 正在运行后台线程 http://msdn.microsoft.com/en-us/library/h339syd0.aspx,因此如果主线程停止,它就会终止。
您可以通过简单的示例对其进行测试。此代码将仅显示一个数字。
static void Main(string[] args)
{
BackgroundWorker mainWorker = new BackgroundWorker();
mainWorker.DoWork += (sender, e) =>
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
Thread.Sleep(500);
}
};
mainWorker.RunWorkerAsync();
}
但如果你添加停止你的主线程Console.Readline();
您将获得所有数字并可以逐步完成DoWork
调试中的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)