2017-02-21 90 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調度程序是SynchronizationContext的實現,它將請求的操作排入UI線程隊列。這樣你就不會使用任何特定的東西。

如果您在UI線程之外運行代碼,那麼SynchronizationContext.Current將引用「默認」實現,而不是您要查找的實現(它不會在UI內運行操作線程,但只是在ThreadPool中)。所以,在這種情況下,如果你有任何UI控件的引用,你可以使用從Control類繼承的任何東西的BeginInvoke方法。

希望這會有所幫助。