2012-06-13 72 views
0

對不起,我不知道如何標題這個問題。MessageBox.Show和延期/延遲更新

我寫了一個解釋這個錯誤約10次,然後將其刪除,因爲它是不明確的 - 原諒我,我跳下直入代碼,然後將解釋

public MainWindow() 
    { 
     InitializeComponent(); 
     stuff(); 
    } 

    private void stuff() 
    { 
      DispatcherOperation disOp = Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(delegate 
       { 
        //PrintDialog dialog = new PrintDialog(); 
        //dialog.PrintVisual(canvas1, ""); 
       })); 

      string x = disOp.Status.ToString(); 
      MessageBox.Show(disOp.Status.ToString()); 
    } 

我已經逐步通過這個代碼(Visual Studio中的F11),並且當它碰到行 disOp.Status.ToString()時,下一個F11跳轉到預期的下一行。

但是,當我到達行MessageBox.Show(disOp.Status.ToString());並按F11時,它跳轉到我的DispatcherOperation委託。

我的問題是爲什麼當我使用Messagebox控件而不是字符串時發生這種情況!?

(這實際上是確切的行爲我需要,但我不想一個消息框出現,因爲用戶必須點擊確定/取消......還能如何我複製這個?)

謝謝你

戴夫

+0

你說得對。你沒有解釋得很好。 :-)如果你不想要一個消息框出現,就不要調用MessageBox.Show()。至於爲什麼它們的行爲不同:編譯器可能會優化'string x'賦值語句,因爲它在未被使用的情況下超出了範圍。 'MessageBox.Show()'不會,因爲它實際上做了一些事情。 –

回答

1

的BeginInvoke不會得到實際運行的動作,直到當前線程自由地處理懸而未決的MSG和消息框必須抽允許消息得到處理(有點像的DoEvents)。

+0

你不知道這實際上有多大幫助。真的,非常感謝你。 – Dave