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

标签 c# wpf dispatcher

我的应用程序在主(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/

相关文章:

c# - 调试 C# 时如何找出内存中生成的项目?

c# - 如何在 C# 中将 HTML 设置为剪贴板?

c# - 将数据发送到特定的 IP 和端口

c# - 如何在 Visual Studio Code 中为 C# 函数、类生成代码注释?

c# - 在 WPF 中禁用 WebBrowser 上的上下文菜单

c# - CollectionViewSource分组,得到sum(Quantity)

wpf - 在WPF textBox中,回车不添加新行

multithreading - 在线程上创建工作队列

python - 名称错误 : name 'app' is not defined with Flask

c# - 多线程 WPF Application : Dispatcher Invoke. 更高效的方法?