[英]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.