-1

私は UBUNTU と同様に Monodevelop を初めて使用し、.Net 並列処理を調査するために c# を使用してデスクトップ アプリケーションを開発しようとしています。Parallel.For ループを使用すると、1 つの問題が発生します。私がインターネットで読んだように、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 に答える