繁体   English   中英

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

[英]Showing MessageBox in long running process

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

该旧代码显示了一个MessageBox ,询问用户是否继续。

现在,我希望此代码尽可能简单地粘贴到MVVM ,并考虑处理回调以显示MessageBox并评估内部结果。

如何做到这一点最简单?

经常看到Action用于回调,但是我不知道如何在旧版代码中使用bool。

我想从旧代码中传递要在MessageBox显示的字符串,并将决定(布尔值)返回到旧代码。

请注意:我现在不必做更大的重构,但是现在想摆脱旧代码中的MessageBox

也许我可以使用像

    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>> 

方法签名? 如何在旧版代码中访问布尔值?

也许您可以使用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的“ 代表教程”页面中找到更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM