2017-02-21 34 views
0

Я двигался по методу моего проекта winforms из проекта wpf.Диспетчер в WinForm

Я понятия не имею, как конвертировать диспетчер в 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

Если вы работаете из потока пользовательского интерфейса, то следующий метод будет наиболее общими один, и будет работать как в WPF и WinForms:

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

Оба диспетчере WinForms и диспетчер WPF представляет собой реализацию SynchronizationContext, который вставляет запрошенное действие в очередь потоков пользовательского интерфейса. Таким образом, вы не используете ничего конкретного.

Если вы используете свой код вне потока пользовательского интерфейса, то SynchronizationContext.Current ссылается на реализацию по умолчанию, которая не является тем, что вы ищете (она не запускает действия внутри пользовательского интерфейса поток, но только в ThreadPool). Итак, в этом случае, если у вас есть ссылка на любой элемент управления пользовательского интерфейса, вы можете использовать метод BeginInvoke всего, что наследуется от класса Control.

Надеюсь, это поможет.