我有一个有点复杂的 WPF 应用程序,当尝试使用调度程序调用 UI 线程上的调用时,它似乎“挂起”或陷入等待调用。
一般流程是:
- 处理按钮上的点击事件
- 创建一个新线程(STA):创建演示者和 UI 的新实例,然后调用方法Disconnect
- 然后断开连接在 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 实现。
那么,是否有什么我做错了,我错过了,明显与否,或者是否有更好的方法来调用 UI 线程来设置这个属性(和其他属性)?
编辑:解决方案是在线程委托结束时调用 System.Windows.Threading.Dispatcher.Run() (例如,正在执行工作的位置) - 感谢所有帮助的人。