[英]stacktrace on VS2010
private void ParallelCrashTest()
{
for (int x = 0;x < 100; x++)
{
Dowork_1(i);
}
}
private void Dowork_1(int i)
{
ThreadInfo threadInfo = new ThreadInfo();
threadInfo.first = 0;
threadInfo.last = 100;
for (int x = 0;x < 60; x++)
{
Dowork_2(threadinfo);
progressBar2.Value = x + 1;
}
}
private void Dowork_2(object param)
{
ThreadInfo threadInfo = param as ThreadInfo;
int first = threadInfo.first;
int last = threadInfo.last;
Parallel.For(first, last, i =>
{
didsomthing...
}
Update();
}
因此它不起作用。 (CPU工作90-100%,这意味着我想我的应用程序仍在工作)我使用Update()而不是Application.DoEvent()
。 我的应用程序崩溃或无法Update()。 我不知道 。 我认为这可能是Update()的问题,但我不确定。 你有什么建议吗? 谢谢 。
以什么方式崩溃?
我的猜测是您正在尝试从另一个线程更新GUI,例如更新进度条。 为此,您必须使用Invoke
。
如果您可以提供一个简化的,简化的但完整的示例代码,该示例可以重现错误,从而使我们不必猜测,这将很有用。 您可以通过将项目复制到新文件夹中,然后删除不必要的文件,类,方法和行,直到无法删除更多行,同时又会重现错误,再删除该行。
从工作线程中,Update()方法和progressBar2.Value分配均不合法。 它不会使Visual Studio崩溃,甚至不会使VS2010崩溃,您都会得到一个简单的IllegalOperationException来告诉您您做的事情不正确。
您需要使用Control.Invoke()方法。 我链接的MSDN文章中有一个很好的例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.