WinForm中的调度程序

时间:2017-02-21 19:06:28

标签: c# wpf winforms dispatcher

我正在从wpf项目转移到winforms项目的方法。

我不知道如何将Dispatcher转换为winforms。

任何人都可以帮助我吗?

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

1 个答案:

答案 0 :(得分:0)

如果您从UI线程运行,那么以下方法将是最通用的方法,并且在WPF和WinForms中都可以使用:

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

WinForms调度程序和WPF调度程序都是SynchronizationContext的实现,它将请求的操作排入UI线程队列。这样你就不会使用任何具体的东西了。

如果您在UI线程之外运行代码,那么SynchronizationContext.Current将引用"默认"实现并不是你正在寻找的东西(它不会在UI线程内部运行,而只是在ThreadPool中运行)。因此,在这种情况下,如果您有任何UI控件的引用,则可以使用继承自Control类的任何内容的BeginInvoke方法。

希望这有帮助。