[英]Get “Calling thread must be STA” when making a new dialog window using MVVM Light messages
我有一个对话框窗口,当我的视图视图模型中收到消息时会显示该窗口
该对话框位于此处http://pastebin.com/BAeCLwhz (我知道我应该在后面隐藏一个空代码,但是将其设置为空是第二优先级,所以现在这不是问题!)
我在Projects View-Model中创建窗口
MessengerInstance.Register<bool>(this, "Homing", ShowHomingDialog);
private void ShowHomingDialog(bool b)
{
HomingRobot hb = new HomingRobot();
hb.ShowDialog();
}
但是,当它运行时,我得到“调用线程必须是STA”,我尝试在代码隐藏的项目而不是在ViewModel中调用对话框,但这给了我相同的结果。 那么我应该如何在不使用“多线程”的情况下弹出窗口,甚至在使用消息时也可以做到?
您可以将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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.