Dispatcher.BeginInvoke并行.For不起作用

时间:2012-08-07 09:27:10

标签: c#-4.0 mono monodevelop

我是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 Version - monodevelop 2.8.6.3 + dfsg-2
Ubuntu版本 - 12.4

1 个答案:

答案 0 :(得分:0)

也许Parallel.For只给你一个线程(你有一个核心CPU吗?) - 那么它将在创建它的同一个线程中运行,如果没有Invoke就不会失败。此外,在某些情况下,可以从后台线程更新UI,但你不能指望它 - 它可能会在以后破坏。