2017-02-21 17 views
0

私はwpfプロジェクトからwinformsプロジェクトにメソッドを移動していました。WinFormのディスパッチャ

Dispatcherをwinformsに変換する方法はわかりません。

誰でもお手伝いできますか?

void gm_MoveDownByThread() 
{ 
    this.Dispatcher.Invoke((Action)(() => 
    { 
     KeyDownMethod(Key.Down); 
    })); 
} 
+1

[Control.Invoke](https://msdn.microsoft.com/en-us/library/zyzhdc6b(v = vs.110).aspx)を参照してください。 – Clemens

+0

も参照してください。 https://stackoverflow.com/questions/13292628/dispatching-events-into-right-thread、https://stackoverflow.com/questions/18134822/how-do-i-convert-wpf-dispatcher-to-winforms、等 –

答えて

-1

あなたはUIスレッドから実行している場合は、以下の方法が最も一般的なものであろうと、WPFでとWinFormsの両方で動作します:

SynchronizationContext.Current.Send(_ => 
      { 
       //anything you wish. 
      }, null); 

両方のWinFormsディスパッチャとWPFディスパッチャは、要求されたアクションをUIスレッドキューにエンキューするSynchronizationContextの実装です。この方法では、特定のものを使用しません。

UIスレッド外でコードを実行している場合、SynchronizationContext.Currentは、あなたが探しているものとは異なる「デフォルト」実装を参照します(UI内のアクションは実行されません)スレッドだけではなく、ThreadPoolの中にあります)。したがって、UIコントロールへの参照がある場合は、Controlクラスから継承するもののBeginInvokeメソッドを使用できます。

これが役に立ちます。

関連する問題