2011-12-03 16 views
2

WPFのUI要素の更新は、UIディスパッチャスレッドでのみ許可されます。したがって、別のスレッドからUI要素を更新しようとすると例外になります。WPFのSwingUtilities.invokeLater相当の

ThreadStart start = delegate(){ 
    Dispatcher.Invoke(DispatcherPriority.Normal, new Action... 
}; 
new Thread(start).Start(); 

Javaは事の同じ種類を行うにはSwingUtilities.invokeLater方法があります。 私はこれを回避するために、インターネット上で見つけた唯一の方法は、のようなものを持っていることです。

私の質問は Java SWING SwingUtilities.invokeLaterに相当する専用のWPFユーティリティクラスはありますか?

答えて

9
Dispatcher.BeginInvoke(
    new Action(() => { 
     label.Text = "Foo" 
    }) 
); 

を使用すると、invokeLater構文

+0

すみませんこれは別のスレッドで実行されますか? – GETah

+0

それは[WPF UI](http://msdn.microsoft.com/en-us/magazine/cc163328.aspx)と同じスレッドで実行されません –

+0

ありがとう、私はそれを明日試してみると戻ってきますいくつかのフィードバック:) – GETah

1

私は確かに答えがあります:いいえ、そこにはありません(私はあなたが多くを助けると思うDispatcher以外)。

コードへのコメント:スレッディングは必要ありません。ただ、

Dispatcher.Invoke(...) 
-1

に、より近いかもしれません**私はあなたがこの方法を使用したと思う:

Application.DoEvents() 

このメソッドは役に立ちますが、反映したいときあなたのウィンドウへのスレッドの変更は、スレッドを処理している間にフォームをアイドル状態にしないでフォームを作成します**

+0

それは同じことをしません。これは、メッセージループを排除するために呼び出されます。 OPは、GUIスレッド上の別のスレッドから何かを実行する方法を求めていました –