2011-05-18 62 views
1

我有當消息在我的瀏覽視圖模型被recived時顯示一個對話框窗口,一個新的對話框窗口時獲取「調用線程必須STA的」使用MVVM光信息

對話是這裏http://pastebin.com/BAeCLwhz (我知道我應該有一個空的代碼隱藏,但是使它空是第二優先,所以現在是不是一個問題!)

我創造我的項目視圖模型的窗口

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

private void ShowHomingDialog(bool b) 
    { 
     HomingRobot hb = new HomingRobot(); 
     hb.ShowDialog(); 
    } 

但當它運行時我得到「調用線程必須是STA」我試過調用項目中的對話框代碼隱藏,而不是在視圖模型中,但這給了我相同的結果。那麼,如何讓我的窗口彈出而不會「多線程」,即使在使用消息時也是如此?

回答

0

你需要「分派」你的UI工作到UI線程。

看到這個提示http://www.silverlightshow.net/items/Tip-Asynchronous-Silverlight-Execute-on-the-UI-thread.aspx

+0

它是我的對話框的創建我必須在調度器中創建一個?如果是的話,我是否會開始調用,然後「找到」UI線程? – Mech0z 2011-05-18 09:14:38

+0

它可能是'hb.ShowDialog()',你需要發送並找到它,找到線程。在Dispatcher上做一些Google搜索。 – BenCr 2011-05-18 09:38:28

7

可以在Dispatcher.Invoke包裹ShowDialog的代碼如下所示

Dispatcher.CurrentDispatcher.Invoke((Action)(() => 
{ 
    HomingRobot hb = new HomingRobot();   
    hb.ShowDialog(); 
})); 

如果上面的代碼不能正常工作,你可以嘗試以下

Application.Current.Dispatcher.Invoke((Action)(() => 
{ 
    HomingRobot hb = new HomingRobot();   
    hb.ShowDialog(); 
})); 
相關問題