要弹出消息框,我正在使用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