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 回答