2017-02-21 87 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方法。

希望这会有所帮助。