thread.Start()完成后回调?

时间:2011-02-02 11:58:06

标签: c# .net multithreading thread-safety

我有一个小问题

我有一个WPF应用程序,一个方法需要一些时间(它通过WCF服务发送信息)。我想在另一个线程而不是GUI线程中执行此操作。

问题:

GUI询问服务,该服务向数据存储区发出请求,该服务器提供与WCF服务通信的新事务管理器。

数据存储区对象将GUI线程作为所有者。

我想在交易经理中做这样的事情:

public void MyMethod(abcdef){
//Income with the GUI thread
//Launch a thread with my action which tooks times
//update my objects with the result(Has to be done with the GUI thread)

但是我没有GUI元素,我可以在其上执行XYZ.Dispatch或Invoke或BeginInvoke。但是当我开始时,我知道GUI线程参考。问题是我将拥有线程所有者例外。

我有一些限制:

  • 我没有GUI对象来开始调用此处
  • 我无法设置数据存储区具有非gui数据存储区
  • 我需要这个电话是非阻塞的
  • 我需要非GUI线程的结果

你对如何做到这一点有所了解吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用Dispatcher.BeginInvoke()

使用该方法,您可以执行带有参数的函数,该函数在GUI线程上执行。您将WPF窗口的Dispatcher属性传递给后台工作程序,并使用该实例的BeginInvoke方法进行通信。