17
A
回答
9
不,您将不得不制作自己的消息框表单。 MessageBox
类仅支持类似于.ShowDialog()
的行为,这是一种模态操作。
只需创建一个新表单,该表单可以接受参数并使用这些参数来构建一个符合您喜好的样式化消息框。
更新2014年7月31日
在保持清晰的谁比谁通过谷歌认为这精神,我想花一秒钟来解释这个有点多:
引擎盖下MessageBox
是Windows SDK user32.dll MessageBox Function周围看上C#包装,从而精确地进行同样的操作(转换.NET枚举成代表在系统调用的同一事物的整数后。
这意味着当你拨打MessageBox.Show()
时,呼叫被封送到操作系统,并将阻止当前线程,直到选择一个选项或窗口被终止。为了防止您的代码被暂停,你需要启动一个单独的线程的消息框,但是这将意味着是来自于消息框后面(有任何结果/没有/好/取消 /等......)将被返回到负责调用消息框的单独线程。
如果您按照这种方式启动此消息框的结果,您将不得不将结果发送回UI Thread for Thread Saftey。
或者,您可以在WinForms/WPF中创建自己的消息框表单,并使用.Show()
方法调用它。按钮上的任何点击事件都将在UI线程上执行,您不必将调用回调到UI线程来操作UI中的事物。
12
您可以通过在单独的线程上调用另一个消息泵来启动另一个消息泵。 MessageBox.Show
泵信息,所以没有电话Application.Run
是安全的。
public void ShowMessageBox()
{
var thread = new Thread(
() =>
{
MessageBox.Show(...);
});
thread.Start();
}
编辑:
我也许应该提到,我不建议这样做。它可能会导致其他问题。例如,如果您有两个线程抽取消息,则消息框可能会卡在另一个表单后面,如果表单正在等待某人关闭消息框,则无法使其消失。你应该尝试找出解决问题的另一种方法。
相关问题
- 1. Messagebox不会停止显示
- 2. {again} C#MessageBox创建不止一次
- 3. messagebox停止验证
- 4. 停止循环创建不需要的代码?
- 5. 防止创建MessageBox的过程
- 6. 代码不停止刷新
- 7. 代码不停止重复
- 8. 如何停止此代码中的多行创建?
- 9. 呼叫完成()不停止的代码
- 10. 我的JavaScript代码不停止
- 11. matlab创建路径来停止复制代码
- 12. 代码停止工作后,我创建使用发布向导
- 13. 代码c中的MessageBox#
- 14. JavaScript函数不停止Button.Click ASP.Net代码
- 15. 返回语句不停止代码java
- 16. 贝宝Ipn不工作代码停止
- 17. 代码停止= IFERROR(VLOOKUP)
- 18. VBA代码停止工作
- 19. 停止执行C#代码
- 20. Javascript代码停止工作
- 21. getImageData后停止代码
- 22. Java代码突然停止
- 23. ASP.NET:停止代码执行
- 24. C代码停止运行
- 25. 代码停止循环
- 26. 停止代码执行Java
- 27. Oracle DataAccess锁代码停止
- 28. Java停止代码执行?
- 29. 停止执行代码
- 30. Outlook代码停止工作
好吧,所以我只需要创建自己的表单。 非常可行,谢谢! – sooprise 2010-07-08 16:10:42
所以如果我有'Messagebox.Show(MessageBoxButtons。OK)'程序会暂停,直到用户点击OK按钮?因为我想运行我的自动化进程,并且在前两个进程完成后,通过Messagebox暂停进程,然后在用户单击消息框后,让下一个自动化进程运行。 – HanH1113 2014-07-31 13:44:22
@ HanH1113封面下的'MessageBox.Show()'方法有效地执行'.ShowDialog()'的相同方式。这是一个阻塞操作,因此执行会暂停,直到对话框关闭。我已经更新了我的答案,以便更清楚。 – Aren 2014-08-01 00:18:47