在使用 MVVM Light 消息创建新对话窗口时获取“调用线程必须是 STA”
本文关键字:调用 获取 线程 STA 窗口 Light MVVM 消息 创建 对话 新对话 | 更新日期: 2023-09-27 17:56:53
我有一个对话框窗口,当在我的视图视图中收到消息时会显示该窗口
对话框 http://pastebin.com/BAeCLwhz(我知道我应该有一个空的代码隐藏,但将其为空是第二优先级,所以现在这不是问题!
我在项目视图模型中创建窗口
MessengerInstance.Register<bool>(this, "Homing", ShowHomingDialog);
private void ShowHomingDialog(bool b)
{
HomingRobot hb = new HomingRobot();
hb.ShowDialog();
}
但是当它运行时,我得到"调用线程必须是 STA",我尝试在项目代码隐藏而不是在视图模型中调用对话框,但这给了我相同的结果。那么,我应该如何在不"多线程"的情况下弹出我的窗口,这在使用消息时甚至可能吗?
您可以将 ShowDialog 代码包装在 Dispatcher.Invoke 中,如下所示
Dispatcher.CurrentDispatcher.Invoke((Action)(() =>
{
HomingRobot hb = new HomingRobot();
hb.ShowDialog();
}));
如果上面的代码不起作用,您可以尝试以下操作
Application.Current.Dispatcher.Invoke((Action)(() =>
{
HomingRobot hb = new HomingRobot();
hb.ShowDialog();
}));
您需要将 UI 工作"分派"到 UI 线程。
请参阅此提示 http://www.silverlightshow.net/items/Tip-Asynchronous-Silverlight-Execute-on-the-UI-thread.aspx