![](/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.