![](/img/trans.png)
[英]Do long running process with Task and showing Exception if there is one
[英]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.