2010-05-08 69 views
5

要彈出消息框,我正在使用MessageBox.Show(...)。我通常包裹呼叫一個Invoke:我是否需要調用MessageBox調用?

BeginInvoke (new Action (() => { 
    MessageBox.Show()); 
})); 

我刪除了原來的問題產品,其回答elsewhere的一部分)

難道我總是需要包裹在MessageBox中調用(Begin- )Invoke如果我從非GUI線程調用?

+0

我添加了一個關於問題2的新問題。(http://stackoverflow.com/questions/2819146/what-is-the-difference-between-invoking-and-begininvoking-a-messagebox) – mafu 2010-05-12 13:23:51

回答

1

簡答:是的,因爲我會認爲這是最佳做法。

較長的答案:

你不應該進入,你必須問自己這個問題,至少不會在長期運行的情況。通常,在一個設計良好的軟件中,您已經定義了用戶界面和「世界其他地方」之間的「網關」,這也是您通過GUI通知必須完成的事情的地方(通過BeginInvoke(EventRaiserMethod(params)))。

+0

從設計點這聽起來很合理,我同意。不過,我也對實際答案感興趣。 – mafu 2010-05-12 12:59:31

+0

對不起,沒有更好的答案,嗯......但我會說,你的第一個問題(關於必要性)主要是一個風格和解釋的問題。問題是:你想把線程安全的問題帶入微軟的手中嗎?你知道他們是否真的在他們的「MessageBox.Show(...)」方法中包含「Invoke」 - 包裝模式?如果他們以後做了並且改變了它會怎樣?關於第二個問題:我有點驚訝,它沒有任何區別。稍後我會嘗試,這看起來很有趣。 – stormianrootsolver 2010-05-12 13:07:29

+0

關於2):MessageBoxes有自己的消息泵,我相信這是負責任的。 – mafu 2010-05-12 13:18:04

0
  1. 據我所知,只要你鴕鳥政策在調用MessageBox.Show你沒有必要調用UI線程上的呼叫業主提供參數。
    也就是說,如果您提供所有者參數,則必須在創建所有者時調用MessageBox.Show的呼叫。
    - 請糾正我,如果I'm錯誤 -
  2. ,如果你想擁有UI線程繼續執行,或者如果你想讓它同時表現出了MSGBOX阻塞這就要看。
相關問題