要彈出消息框,我正在使用MessageBox.Show(...)
。我通常包裹呼叫一個Invoke:我是否需要調用MessageBox調用?
BeginInvoke (new Action (() => {
MessageBox.Show());
}));
(我刪除了原來的問題產品,其回答elsewhere的一部分)
難道我總是需要包裹在MessageBox中調用(Begin- )Invoke
如果我從非GUI線程調用?
要彈出消息框,我正在使用MessageBox.Show(...)
。我通常包裹呼叫一個Invoke:我是否需要調用MessageBox調用?
BeginInvoke (new Action (() => {
MessageBox.Show());
}));
(我刪除了原來的問題產品,其回答elsewhere的一部分)
難道我總是需要包裹在MessageBox中調用(Begin- )Invoke
如果我從非GUI線程調用?
簡答:是的,因爲我會認爲這是最佳做法。
較長的答案:
你不應該進入,你必須問自己這個問題,至少不會在長期運行的情況。通常,在一個設計良好的軟件中,您已經定義了用戶界面和「世界其他地方」之間的「網關」,這也是您通過GUI通知必須完成的事情的地方(通過BeginInvoke(EventRaiserMethod(params)))。
從設計點這聽起來很合理,我同意。不過,我也對實際答案感興趣。 – mafu 2010-05-12 12:59:31
對不起,沒有更好的答案,嗯......但我會說,你的第一個問題(關於必要性)主要是一個風格和解釋的問題。問題是:你想把線程安全的問題帶入微軟的手中嗎?你知道他們是否真的在他們的「MessageBox.Show(...)」方法中包含「Invoke」 - 包裝模式?如果他們以後做了並且改變了它會怎樣?關於第二個問題:我有點驚訝,它沒有任何區別。稍後我會嘗試,這看起來很有趣。 – stormianrootsolver 2010-05-12 13:07:29
關於2):MessageBoxes有自己的消息泵,我相信這是負責任的。 – mafu 2010-05-12 13:18:04
MessageBox.Show
你沒有必要調用UI線程上的呼叫業主提供參數。 MessageBox.Show
的呼叫。
我添加了一個關於問題2的新問題。(http://stackoverflow.com/questions/2819146/what-is-the-difference-between-invoking-and-begininvoking-a-messagebox) – mafu 2010-05-12 13:23:51