我可以显示 MessageBox 但仍使用该表单吗?

Can I show a MessageBox but still use the form?

有可能当我使用:

MessageBox.Show("hello");

.. 仍然使用表单但 MessageBox 像第二个一样打开 window? 因为目前,当我显示 MessageBox 时,我需要先单击是或否,然后我才能再次使用我的表单。

没有。应用程序焦点将保留在消息框上,直到它被关闭。根据the documentation:

It is a modal window, blocking other actions in the application until the user closes it.

可以做的是创建您自己的表单,将其设置为看起来像标准消息框的样式,然后使用实例上的 .Show() 功能显示该表单其中:

var messageBox = new MyCustomMessageBox("hello");
messageBox.Show();

如果您希望功能在使用上完全相同,您甚至可以在自定义表单中添加一个 static 方法来封装它:

public static void Show(string message)
{
    new MyCustomMessageBox(message).Show();
}

虽然我不建议调用您的自定义表单 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 以将其保持在顶部。