2

ビューによって呼び出される CloseWindow メソッドを使用して、ウィンドウ表示サービスがあります。呼び出しコードでブロッキング メソッドを作成したいと考えています。したがって、ウィンドウがポップアップしている間はブロックし、ウィンドウから出力が返されるようにすることができます。

この手動リセットの使用は許容されますか? それまたは TPL との混合方法に技術的または設計上の問題はありますか?

そのサービスはこちら

private readonly ManualResetEvent closedEvent = new ManualResetEvent(true);

public void DisplayWindow(){
     window = new MyWindow();
} 

public void CloseWindow() {
     window.Close();
     closedEvent.Set();
}

//new
public async Task WaitClosed()
    {
        await Task.Run(() => this.closedEvent.WaitOne());
    }

ここにそれを呼び出すコードがあります。

public void DisplayWindow(string content, string title)
    {
        dialogservice.DisplayWindow();
    }

    public async Task DisplayWindowAsync(string content, string title)
    {
        dialogservice.DisplayWindow();
        await dialogservice.WaitClosed();
    }
4

1 に答える 1

2

ハングしたスレッドなしで、より簡単に実行できるように見えます。

private readonly TaskCompletionSource<bool> windowClosed
    = new TaskCompletionSource<bool>();

public Task WindowClosed { get { return windowClosed.Task; } }


public void CloseWindow() {
    window.Close();
    windowClosed.TrySetResult(true);
}

と:

await dialogservice.WindowClosed;
于 2014-10-15T12:10:03.553 に答える