在长时间运行的进程中显示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?
也许您可以使用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上的"学员教程"页面了解更多信息。