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