从其他线程执行主线程(UI)中的函数

本文关键字:线程 UI 函数 其他 执行 | 更新日期: 2023-09-27 17:53:30

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

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

从这个线程,我想做一些操作的UI治疗。一键点击!!我正在使用

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

,但这不起作用。请让我知道谁可以执行命令主线程(UI)从这个后台线程。

从其他线程执行主线程(UI)中的函数

在后台线程中,CurrentDispatcher将为空。您需要使用与您想要修改的UI相关联的调度程序。如果不能从线程代码访问控件本身,可以在启动线程时直接传入调度程序。(假设当你启动第二个线程时你在UI线程上)

如注释中所述,假设您只有一个调度程序(这很有可能),您可以使用Application.Current.Dispatcher在任何地方访问它。(通过这种静态方法进行测试比较困难,但是很容易编写代码…)

或者,如果你正在使用c# 5和。net 4.5,我建议你研究一下异步方法,这会使很多事情变得更简单。