gpt4 book ai didi

c# - Deployment.Current.Dispatcher.BeginInvoke(()=>{}) 是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 22:04:29 32 4
gpt4 key购买 nike

每当我在 Windows Phone 项目中遇到 Invalid-CrossThread-Access 错误时,我都会在 Deployment.Current.Dispatcher.BeginInvoke(() => {}) 中执行我的代码,一切正常在那之后。但是我从来没有清楚地理解它的含义。

有人可以详细解释它如何解决我的跨线程错误以及它的每个部分的含义。据我搜索,它用于在 UI 线程上执行一些代码。

但是什么是部署、当前和调度程序对象。我还能如何使用它们。时间差

最佳答案

问题出在Windows平台的设计上。您不能从另一个创建对象的线程更改用户界面(特别是 Win32 对象)。

Dispatcher.BeginInvoke 在 UI 线程上执行作为参数提供的委托(delegate),而不是在调用它的线程上执行。

Deployment.Current 是一个 singleton引用当前运行的应用程序,Dispatcher 是程序中负责传递消息的部分。 BeginInvoke 实际找到正确线程并执行委托(delegate)的方法。

BeginInvokeInvoke 之间的区别在于第一个是异步运行的。 Invoke 立即执行,执行暂停直到方法完成。

关于c# - Deployment.Current.Dispatcher.BeginInvoke(()=>{}) 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25228188/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com