2012-08-07 56 views
0

我是新來的Monodevelop以及UBUNTU,現在我正在嘗試開發一個使用c#的桌面應用程序來調查.Net並行性。當我使用Parallel.For循環時,我遇到了一個問題。在Internet上閱讀時,Dispatcher.beginInvoke會將工作線程完成的工作委託給UI線程。文章還說,如果你不使用調度程序,它將通過一個錯誤的桌面應用程序。但它仍然適合我。我不理解這裏發生了什麼(這裏是我使用的鏈接 - http://blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-programming-in-net-framework-4-getting-started.aspxDispatcher.BeginInvoke在paralell.For不工作

這裏是代碼:

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

如果我拿出「this.Dispatcher.BeginInvoke(新行動(()=>」的語句它仍然工作正常,但根據上面提到的我不應該工作的聯繫

詳情:

MonoDevelop的版本 - MonoDevelop的2.8.6.3 + DFSG-2
。 0 UBUNTU Version - 12.4

急需一些幫助!

謝謝你的時間。

+2

調度程序是WPF框架的一部分,它沒有在Mono中實現。你試圖使用什麼樣的GUI框架?它可能是Windows窗體,然後這裏是你感興趣的方法:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.begininvoke(v=vs.100).aspx – 2012-08-07 12:26:45

+0

我不明白你的意思「你想用什麼樣的GUI框架?」你能否向我詳細說明一下。 – Veeresh 2012-08-07 20:14:52

+0

請看這裏:http://www.mono-project.com/Gui_Toolkits – 2012-08-09 09:10:03

回答

0

也可能Parallel.For只給你一個單線程(你是否有一個單核CPU?) - 那麼它將運行在它創建的同一線程中,並且不會在沒有調用的情況下失敗。另外,在某些情況下,你可以用以後臺線程更新UI,但是你不能指望它 - 它可能會在以後中斷。

+0

不,我一次可以運行四個線程。而且我可以看到,當我執行我的程序時,所有核心都將工作,並且比正常的For循環快兩倍 – Veeresh 2012-08-07 20:12:54