.NET从其他线程在主线程(UI)中执行函数

时间:2013-01-16 12:06:23

标签: c# wpf dispatcher

我的应用程序从主(UI)线程以外的线程中的h / w设备接收一些命令。

// start receiver-thread
m_recThread = new Thread(RecThread) { Name = "RS" };

从这个线程我想在UI Theraad上做一些动作。说点击一键!我正在使用

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, 
  new Action<Vote>(StartThisVote), presidentvote);

但这没效果。请告诉我谁可以从此后台线程执行主线程(UI)中的命令。

1 个答案:

答案 0 :(得分:2)

从后台线程中,CurrentDispatcher将为null。您需要使用与要修改的UI关联的调度程序。如果您无法从线程代码访问控件本身,则可以在启动线程时直接传递调度程序。 (假设您在启动辅助线程时使用的是UI线程。)

如评论中所述,假设您刚刚获得了一个调度员(很可能),您可以使用Application.Current.Dispatcher在任何地方访问它。 (通过这种静态方法测试更难,但编码很容易......)

或者,如果您使用的是C#5和.NET 4.5,我建议您查看异步方法,这样可以简化这些方法。