我的应用程序在主(UI)线程之外的线程中接收来自硬件设备的一些命令。
// start receiver-thread
m_recThread = new Thread(RecThread) { Name = "RS" };
从这个线程中,我想在 UI Theraad 上执行一些操作。说一键点击!我正在使用
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal,
new Action<Vote>(StartThisVote), presidentvote);
但这并没有奏效。请让我知道谁可以从这个后台线程在主线程(UI)中执行命令。
最佳答案
从后台线程,CurrentDispatcher
将为空。您需要使用与要修改的 UI 关联的调度程序。如果您无法从线程代码访问控件本身,则可以在启动线程时直接传递调度程序。 (假设当您启动辅助线程时您位于 UI 线程上。)
正如评论中所述,假设您刚刚获得了一个调度程序(这很可能),您可以使用 Application.Current.Dispatcher
在任何地方访问它。 (通过这种静态方法测试比较困难,但编写代码很容易......)
或者,如果您使用 C# 5 和 .NET 4.5,我建议您研究异步方法,这会使事情变得更简单。
关于c# - .NET从其他线程在主线程(UI)中执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14358092/