2011-06-22 11 views
0

また、このディスパッチャを別のBeginInvokeと再利用すると、 "Dispatcher.Run"が再度必要になりますか?Dispatcher.BeginInvokeを使用しているときに、/なぜDispatcher.Runを呼び出す必要があるのですか?

var thread = new Thread(() => 
      { 
       this.dispatcher = Dispatcher.CurrentDispatcher; 
       this.dispatcher .BeginInvoke(new Action(() => 
       { 
        try 
        { 
         do something 
        } 
        catch (Exception ex) 
        { 
         onNotify(ex); 
        } 
       })); 
       Dispatcher.Run(); 
      }); 
      thread.Name = string.Format("{0} Hook Thread", this.GetType().Name); 
      thread.IsBackground = true; 
      thread.SetApartmentState(ApartmentState.STA); 
      thread.Start(); 
+0

何をしようとしていますか? – SLaks

+0

特定のタイプのすべての呼び出しを非UIスレッド(ただし、その1つのスレッドのみ)で実行しようとしています – tofutim

答えて

3

Dispatcher.BeginInvokeディスパッチャのイベントキューへの上にデリゲートを追加します。

キューは、Run()内でのみ処理されます。

Run()は、永久に(またはInvokeShutdown()に電話するまで)実行されるブロッキングコールです。

BeginInvoke()に再度電話すると、Run()はすぐに新しいデリゲートが表示され、すぐに実行されます。 (またはそれが無料になるとすぐに)

+0

gotcha、私のコードのどこかに "dispatcher.BeginInvoke(元のスレッドで何か他のことをする)"それを実行する準備ができています。 – tofutim

+0

はい。 – SLaks

関連する問題