C# 如何从工作线程中调用UI线程上的方法?
我正在从事一个使用以下技术的项目:C# 如何从工作线程中调用UI线程上的方法?,c#,wpf,multithreading,wcf,prism,C#,Wpf,Multithreading,Wcf,Prism,我正在从事一个使用以下技术的项目: C#(.NET 4.0) 周转基金 棱镜4 我目前正在使用代理生成的Begin/End方法对我们的一个Web服务进行异步调用。调用成功,客户端能够在工作线程上接收Web服务的响应 收到响应后,我继续提出一个事件。订阅事件的类继续使用PRISM请求UI导航: Application.Current.Dispatcher.BeginInvoke(new Action(() => this.RegionManager.RequestNavigate
- C#(.NET 4.0)
- 周转基金
- 棱镜4
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
this.RegionManager.RequestNavigate(RegionNames.LoginContentRegion, projectSelectionViewUri)));
由于异步WCF响应未在UI线程上捕获,因此我被迫使用Application.Current.Dispatcher.BeginInvoke(…)
调用UI线程
这里的问题是调用似乎什么都不做。UI不会更新,也不会引发异常
如何从工作线程上引发的事件中调用UI线程
编辑:此问题已在以下链接中重新提出,因为假定的副本未提供答案:
您需要确保在实际的UI
调度程序上调用,而不一定是当前的调度程序。您可以尝试传入UI调度程序
,或者让UI在某个地方处理某种形式的回调。我如何传递UI调度程序?假设您从某个UI元素(即用户控件
)创建需要它的类,您可以执行以下操作:var someClass=new someClass>(这是调度员);
@Ramhound将某个类a引用传递到主窗口
永远不是一个好的解决方案,除非该类将处理主窗口的某个部分。如果只是使用调度程序
,您只需要通过调度程序
@Slade-如果您说这不是一个好方法,我相信您想法。我这样做的唯一原因是为了得到调度程序,这是我使用ISyncInvokOk的一种方法,有两个建议:1.创建一些类来包含对UIdispatcher
的静态引用(这不是一个特别好的方法,但如果做得好,应该足够容易管理).2.发布您尝试使用的IoC代码示例,我或其他人可能会提供进一步帮助。为什么关闭此线程。可能的副本不涉及WPF窗口,并且已经有近3年的历史,我知道这是一个常见的主题(站点范围),但可能的副本并不常见。我同意Ramhound。。。