-1

我是 Monodevelop 和 UBUNTU 的新手,现在我正在尝试使用 c# 开发一个桌面应用程序来研究 .Net 并行性。当我使用 Parallel.For 循环时,我遇到了一个问题。正如我在网上看到的,Dispatcher.beginInvoke 会将工作线程完成的工作委托给 UI 线程。

该文章还说,如果您不使用调度程序,它将通过桌面应用程序的错误。但它对我来说仍然很好。我不明白这里发生了什么。(这是我正在使用的链接——http: //blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-programming-in-net-framework-4-getting-started.aspx

这是代码:

Parallel.For(2, 20, (i) =>
{
   var result = SumRootN(i);
   this.Dispatcher.BeginInvoke(new Action(() =>
   textBlock1.Text += "root " + i.ToString() + " " +
   result.ToString() + Environment.NewLine)
   , null);
});

如果我取出 "this.Dispatcher.BeginInvoke(new Action(() =>" 语句仍然按预期工作,但根据我上面提到的链接它不应该工作。

细节:

Monodevelop 版本 - monodevelop 2.8.6.3+dfsg-2
Ubuntu 版本 - 12.4

4

1 回答 1

0

也可能Parallel.For是只给你一个线程(你有一个单核 CPU 吗?) - 然后它将在创建它的同一线程中运行,并且在没有 Invoke 的情况下不会失败。此外,在某些情况下,您可以从后台线程更新 UI,但您不能指望它 - 它可能会在以后中断。

于 2012-08-07T13:04:58.327 回答