簡體   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