2013-01-16 46 views
2

我的应用程序从主线程(UI)线程以外的线程接收来自h/w设备的一些命令。.NET在其他线程的主线程(UI)中执行函数

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

从这个线程我想做的一些行动在UI Theraad。说一个按钮点击!我正在使用

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

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

+0

你是什么意思“这没用......” – DHN

回答

2

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

正如评论中指出的那样,假设你只有一个调度程序(很有可能),你可以使用Application.Current.Dispatcher来访问它。 (这很难通过这种静态方法进行测试,但很容易编码...)

或者,如果您使用C#5和.NET 4.5,我建议您查看异步方法,这会使这很简单。

+0

你应该也可以通过'Application.Current.Dispatcher'来访问Dispatcher。 – Clemens

+0

@Clemens:好点 - 会补充一点。 –

+0

谢谢,乔恩!它的工作。 – kamlendra

相关问题