我有一个有点复杂的 WPF 应用程序,当尝试使用调度程序在 UI 线程上调用调用时,该应用程序似乎“挂起”或陷入 Wait 调用中。
一般流程是:
- 处理按钮上的点击事件
- 创建一个新线程 (STA):创建演示者和 UI 的新实例,然后调用该方法断开
- 然后断开连接在 UI 上设置一个名为Name
- 然后,Name 的设置器使用以下代码来设置属性:
if(this.Dispatcher.Thread != Thread.CurrentThread)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate{
this.Name = value; // Call same setter, but on the UI thread
});
return;
}
SetValue(nameProperty, value); // I have also tried a member variable and setting the textbox.text property directly.
我的问题是当调度员invoke调用方法似乎每次都会挂起,并且调用堆栈表明它处于睡眠、等待或加入 Invoke 实现中。
那么,我是否做错了什么,无论是否明显,或者是否有更好的方法来调用 UI 线程来设置此属性(和其他属性)?
Edit:解决方案是在线程委托末尾(例如正在执行工作的位置)调用 System.Windows.Threading.Dispatcher.Run() - 感谢所有提供帮助的人。
调用是同步的 - 您需要 Dispatcher.BeginInvoke。另外,我相信您的代码示例应该将“SetValue”移动到“else”语句内。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)