问题描述
有可能当我使用时:
MessageBox.Show("hello");
..仍然使用表单,但是MessageBox像第二个窗口一样打开了吗? 因为当前,当我显示MessageBox时,我需要先单击“是”或“否”,然后我才能再次使用表单。
解决方法
是的,可以!
如果只想显示一个MessageBox,不关心它会发生什么,又不想等到它关闭,则可以在一个单独的线程上启动它。最简单的方法是使用Task.Run()
。
这是一个例子:
private void button1_Click(object sender,EventArgs e)
{
Task.Run(() => MessageBox.Show("hello"));
// The remaining code will run without waiting for the MessageBox to be closed.
}
一些值得一提的笔记:
-
仅将其用于不关心结果的简单消息框。如果您想根据结果采取行动并执行某些操作(在主线程上),则事情会变得有些棘手。
-
您将无法将MessageBox保持在表单顶部。与表单互动后,它将排在最前面。如果您需要将MessageBox放在顶部,并且仍然能够与表单交互,那么在这种情况下,自定义MessageBox(即表单)会更好,因为您可以设置
Owner
property使其保持在顶部。
不。应用程序焦点将一直保留在“消息框”上,直到将其关闭。根据{{3}}:
这是一个模式窗口,阻止应用程序中的其他操作,直到用户关闭它为止。
可以要做的是创建自己的表单,将其样式设置为标准的消息框,然后在其实例上使用.Show()
功能显示该表单:>
var messageBox = new MyCustomMessageBox("hello");
messageBox.Show();
如果您希望功能使用相同,甚至可以在自定义表单中添加一个static
方法来对其进行封装:
public static void Show(string message)
{
new MyCustomMessageBox(message).Show();
}
尽管我不建议您致电自定义表单MessageBox
,但这只会引起混乱。