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