c#中的非自动阻塞MessageBoxes

问题描述 投票:12回答:4

任何人都知道.NET中的messageBox不会阻止创建它的线程,直到它关闭?

c# .net winforms
4个回答
11
投票

您通过MessageBox命名空间使用的默认System.Windows.Forms将始终为Modal(即阻塞)。如果你想要一个无模式消息框,你应该创建自己的WindowsForm,看起来像一个MessageBox

然后,您将显示以下表格:

// C#
//Display frmAbout as a modeless dialog
Form f= new Form();
f.Show();

20
投票
private void ShowMessageBox(string text, string caption)
{
    Thread t = new Thread(() => MyMessageBox(text, caption));
    t.Start();
}

private void MyMessageBox(object text, object caption)
{
    MessageBox.Show((string)text, (string)caption);
}

你可以用你的文字和标题来调用ShowMessageBox()。这只是一个简单的示例,您可以添加按钮或图标所有者或您想要的其他参数。


11
投票

可能最简单的是:

Thread t = new Thread(() => MessageBox.Show(text));
t.Start();

10
投票

您可以将这些其他答案简化为一行代码

new Thread(() => System.Windows.Forms.MessageBox.Show(text)).Start();
© www.soinside.com 2019 - 2024. All rights reserved.