【问题标题】:C# How to make async MessageBox that returns DialogResult?C#如何制作返回DialogResult的异步MessageBox?
【发布时间】:2016-04-22 21:45:20
【问题描述】:

我的 MessageBox 是异步的,但如何返回 DialogResult?

这是我的代码:

class AsyncMessageBox
{
    private delegate void ShowMessageBoxDelegate(string strMessage, string strCaption, MessageBoxButtons enmButton, MessageBoxIcon enmImage);
    // Method invoked on a separate thread that shows the message box.
    private static void ShowMessageBox(string strMessage, string strCaption, MessageBoxButtons enmButton, MessageBoxIcon enmImage)
    {
        MessageBox.Show(strMessage, strCaption, enmButton, enmImage);
    }
    // Shows a message box from a separate worker thread.
    public void ShowMessageBoxAsync(string strMessage, string strCaption, MessageBoxButtons enmButton, MessageBoxIcon enmImage)
    {
        ShowMessageBoxDelegate caller = new ShowMessageBoxDelegate(ShowMessageBox);
        caller.BeginInvoke(strMessage, strCaption, enmButton, enmImage, null, null);
    }
}

【问题讨论】:

  • 为什么需要异步消息框?
  • 虽然我不知道异步消息框的用法,但是如果您想显示一个非阻塞消息框并使用对话框结果,您可以使用Task.Run
  • 我在在线程序中使用异步消息框。这有助于保持连接活跃。例如,如果有人断开连接,则会显示消息框。如果有人断开更多连接,则会显示另一个消息框。嗯,这很难解释,但我得到了答案。

标签: c# winforms asynchronous messagebox dialogresult


【解决方案1】:

如果要使用非阻塞消息框的对话结果并根据结果执行作业:

Task.Run(() =>
{
    var dialogResult=  MessageBox.Show("Message", "Title", MessageBoxButtons.OKCancel);
    if (dialogResult == System.Windows.Forms.DialogResult.OK)
        MessageBox.Show("OK Clicked");
    else
        MessageBox.Show("Cancel Clicked");
});

注意:

  • Task.Run 之后的代码会立即运行,而与消息框无关。

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 2020-07-14
    • 2016-03-13
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    相关资源
    最近更新 更多