繁体   English   中英

使用MVVM Light消息创建新的对话框窗口时,获取“调用线程必须为STA”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM