在长时间运行的进程中显示MessageBox

本文关键字:显示 MessageBox 进程 长时间 运行 | 更新日期: 2023-09-27 18:28:37

MVVM应用程序中,我有一个长期运行的计算在遗留代码中。

该遗留代码显示MessageBox以询问用户是否应继续。

现在,我希望这个代码尽可能简单地坚持MVVM,并思考关于提交回调以显示MessageBox并评估内部结果。

如何做到这一点最简单?

我经常看到Action的回调,但我不知道如何使用遗留代码中的bool。

我想传递遗留代码中显示在MessageBox中的字符串并将决策(bool)返回给遗留代码。

请注意:我现在不需要进行更大的重构,但希望现在就去掉遗留代码中的CCD_ 6。

也许我可以使用这样的功能

    private bool ShowMessageBox(string text)
    {
        var result = MessageBox.Show(text, "", MessageBoxButton.YesNo);
        if (result.Equals(MessageBoxResult.Yes))
        {
            return true;
        }
        return false;
    }

-编辑-

我应该用吗

Action<string, Action<bool>> 

方法签名?如何访问遗留代码中的bool?

在长时间运行的进程中显示MessageBox

也许您可以使用delegate

对于您展示的方法,您可以创建一个delegate,如下所示:

public delegate bool ShowMessageBoxDelegate(string text);

假设您有一个使用delegate作为类型的属性:

public ShowMessageBoxDelegate ShowMessageBoxDelegateProperty { get; set; }

现在,如果您的ShowMessageBox方法与此delegate的签名匹配。。。

public bool ShowMessageBox(string text)
{
    var result = MessageBox.Show(text, "", MessageBoxButton.YesNo);
    if (result.Equals(MessageBoxResult.Yes))
    {
        return true;
    }
    return false;
}

则可以将其设置为ShowMessageBoxDelegateProperty属性的值:

ShowMessageBoxDelegateProperty = ShowMessageBox;

注意缺少的括号。delegate也可以是多播的,这简单地意味着它们可以连接多个方法:

ShowMessageBoxDelegateProperty += ShowMessageBox;

您也可以将它们用作方法中的参数:

public void ProxyShowMessageBox(ShowMessageBoxDelegate showMessageBoxDelegate)
{
    if (showMessageBoxDelegate != null)
    {
        bool result = showMessageBoxDelegate("MessageBox message");
    }
}

然后你会这样称呼它:

ProxyShowMessageBox(ShowMessageBox);

您可以从MSDN上的"学员教程"页面了解更多信息。