Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 Dispatcher.BeginInvoke并行。For不工作_C# 4.0_Mono_Monodevelop - Fatal编程技术网

C# 4.0 Dispatcher.BeginInvoke并行。For不工作

C# 4.0 Dispatcher.BeginInvoke并行。For不工作,c#-4.0,mono,monodevelop,C# 4.0,Mono,Monodevelop,我对Monodevelop和UBUNTU都是新手,现在我正尝试使用c#开发一个桌面应用程序来研究.Net并行性。当我使用Parallel.For循环时,我遇到了一个问题。从我在Internet上读到的开始,Dispatcher.beginInvoke将把工作线程完成的工作委托给UI线程 文章还说,如果不使用dispatcher,桌面应用程序将出现错误。但对我来说仍然很好。我不明白这里发生了什么。(这是我正在使用的链接--) 代码如下: Parallel.For(2, 20, (i) =>

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

文章还说,如果不使用dispatcher,桌面应用程序将出现错误。但对我来说仍然很好。我不明白这里发生了什么。(这是我正在使用的链接--)

代码如下:

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(newaction(()=>)语句,它仍然像预期的那样工作,但是根据我上面提到的链接,它不应该工作

详情:

Monodevelop版本-Monodevelop 2.8.6.3+dfsg-2

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

Dispatcher是WPF框架的一部分,它没有在Mono中实现。您尝试使用哪种GUI框架?可能是Windows窗体,然后是您感兴趣的方法:我不理解您的意思“您想使用什么样的GUI框架?”你能给我详细解释一下吗?看这里:不,我一次可以运行四个线程。我还可以看到,当我执行我的程序时,所有的内核都会工作,比正常的For循环快一倍