【问题标题】:Dispatcher in WinForm [duplicate]WinForm中的调度程序[重复]
【发布时间】:2017-02-22 04:02:13
【问题描述】:
我正在将一个方法从 wpf 项目转移到我的 winforms 项目。
我不知道如何将 Dispatcher 转换为 winforms。
谁能帮帮我?
void gm_MoveDownByThread()
{
this.Dispatcher.Invoke((Action)(() =>
{
KeyDownMethod(Key.Down);
}));
}
【问题讨论】:
标签:
c#
wpf
winforms
dispatcher
【解决方案1】:
如果您从 UI 线程运行,那么以下方法将是最通用的方法,并且适用于 WPF 和 WinForms:
SynchronizationContext.Current.Send(_ =>
{
//anything you wish.
}, null);
WinForms 调度程序和 WPF 调度程序都是 SynchronizationContext 的实现,它们将请求的操作排入 UI 线程队列。这样你就不会使用任何特定的东西。
如果您在 UI 线程之外运行代码,则 SynchronizationContext.Current 将引用不是您正在寻找的“默认”实现(它不会在 UI 线程内运行操作,但只是在线程池中)。因此,在这种情况下,如果您引用了任何 UI 控件,则可以使用继承自 Control 类的任何内容的 BeginInvoke 方法。
希望这会有所帮助。