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

Mec*_*h0z 2 .net c# wpf mvvm-light

我有一个对话窗口,在我的Views View-Model中收到一条消息时显示

对话框就在这里http://pastebin.com/BAeCLwhz(我知道我应该有一个空的代码隐藏,但是将它变为空是第二优先,所以现在不是问题!)

我在我的Projects View-Model中创建窗口

MessengerInstance.Register<bool>(this, "Homing", ShowHomingDialog);

private void ShowHomingDialog(bool b)
    {
        HomingRobot hb = new HomingRobot();
        hb.ShowDialog();
    }
Run Code Online (Sandbox Code Playgroud)

但是当它运行时我得到"调用线程必须是STA"我尝试在项目代码隐藏而不是在viewmodel中调用对话框,但这给了我相同的结果.那么我怎么能让我的窗口弹出而不是"多线程",即使使用消息也是如此?

小智 7

您可以将ShowDialog代码包装在Dispatcher.Invoke中,如下所示

Dispatcher.CurrentDispatcher.Invoke((Action)(() =>
{
    HomingRobot hb = new HomingRobot();        
    hb.ShowDialog();
}));
Run Code Online (Sandbox Code Playgroud)

如果上述代码不起作用,您可以尝试以下操作

Application.Current.Dispatcher.Invoke((Action)(() =>
{
    HomingRobot hb = new HomingRobot();        
    hb.ShowDialog();
}));
Run Code Online (Sandbox Code Playgroud)