我的应用程序从主(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)中的命令。
答案 0 :(得分:2)
从后台线程中,CurrentDispatcher
将为null。您需要使用与要修改的UI关联的调度程序。如果您无法从线程代码访问控件本身,则可以在启动线程时直接传递调度程序。 (假设您在启动辅助线程时使用的是UI线程。)
如评论中所述,假设您刚刚获得了一个调度员(很可能),您可以使用Application.Current.Dispatcher
在任何地方访问它。 (通过这种静态方法测试更难,但编码很容易......)
或者,如果您使用的是C#5和.NET 4.5,我建议您查看异步方法,这样可以简化这些方法。