2010-05-08 71 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阻塞这就要看。
相关问题