C# 使用事件等待句柄阻止窗口关闭,然后包装为异步等待。可以接受吗?

C# 使用事件等待句柄阻止窗口关闭,然后包装为异步等待。可以接受吗?,c#,wpf,windows-store-apps,task-parallel-library,event-wait-handle,C#,Wpf,Windows Store Apps,Task Parallel Library,Event Wait Handle,我有一个窗口显示服务,带有视图调用的CloseWindow方法。我想在调用代码中创建一个阻塞方法。因此,我可以在弹出窗口时进行阻止,并允许输出从窗口返回 使用手动复位是否可以接受?它或我将其与第三方物流混合的方式是否存在任何技术或设计问题 这是服务 private readonly ManualResetEvent closedEvent = new ManualResetEvent(true); public void DisplayWindow(){ window = new M

我有一个窗口显示服务,带有视图调用的CloseWindow方法。我想在调用代码中创建一个阻塞方法。因此,我可以在弹出窗口时进行阻止,并允许输出从窗口返回

使用手动复位是否可以接受?它或我将其与第三方物流混合的方式是否存在任何技术或设计问题

这是服务

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();
    }

它看起来可以做得更简单,没有挂线:

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

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


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

为什么不
ShowDialog
?谢谢。为了安全起见,我在构造函数中将其设置为true,在DisplayWindow()中将其设置为false。这是一种把我的结果传回来的方式,太好了。@NathanCooper不;不要在构造函数中设置为true;
true
/
false
在这里没有任何意义;如果你设置了一个结果,你就是在告诉它它已经完成了。你不会想要的。你希望它不完整。
await dialogservice.WindowClosed;