首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调度员疯了,我怎么还在后台线程中,或者Visual错了?

问调度员疯了,我怎么还在后台线程中,或者Visual错了?
EN

Stack Overflow用户
提问于 2012-07-21 17:20:30
回答 1查看 554关注 0票数 0

我正在使用后台工作人员调用后台线程中的视图模型中的服务模块调用,所有这些都很好。

服务模块方法具有一个动作参数,在服务返回时调用该参数。现在,我需要回到UI线程来调用操作(我还尝试在viewmodel方法中返回UI线程,该方法是从服务模块调用的)。

所以问题的关键是我已经试过了

代码语言:javascript
复制
Application.Current.RootVisual.Dispatcher.BeginInvoke(() => code stuff here);

这会产生无效的跨线程访问(很好,我在这里无法访问rootvisual,我理解)

然后,我试图让调度员换一种方式,如下所示

代码语言:javascript
复制
Deployment.Current.Dispatcher.BeginInvoke() => code here);

我还尝试了一个静态类,它有一个Dispatcher属性,我在我的应用程序启动方法中设置了这个属性,然后尝试使用这个属性进行调用。

虽然使用部署dispatcher和我的静态类的dispatcher不会产生无效的跨线程访问,但让我如此困惑的关键是,如果我在这些调度程序调用的代码中的断点,那么我得到的System.Threading.Thread.CurrentThread.ThreadState是背景

不过,我可以在我的视图模型中更新我的属性,并且视图确实没有问题地进行更新,但是我想知道这里是否还有什么问题,这将是未来的一个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-21 17:29:53

要到达UI dispactcher,可以使用以下代码-

代码语言:javascript
复制
Application.Current.Dispatcher.BeginInvoke() => code here);

听你的评论-

我应该添加一个最令人困惑的部分是从我所读到的使用dispatcher是为了保证您回到UI线程!

您误解了在UI dispatcher上调用委托会将您带到UI线程,上面的代码调用将只在UI dispatcher上排队并在UI线程上执行。但是,执行点将出现在后台线程上,从您调用此操作的位置开始。

这些链接可能对您有用- 理解调度员和调度员概述。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11594287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档