2

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

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

从这个线程我想对 UI Theraad 做一些操作。说一键点击!!!我在用

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

但这没有用。请让我知道谁可以从这个后台线程执行主线程(UI)中的命令。

4

1 回答 1

2

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

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

或者,如果您使用的是 C# 5 和 .NET 4.5,我建议您研究异步方法,这会使事情变得更简单。

于 2013-01-16T12:10:16.757 回答