使用事件等待句柄阻止窗口关闭,然后包装为异步等待.可接受
本文关键字:等待 然后 包装 异步 可接受 窗口 事件 句柄 | 更新日期: 2023-09-27 18:26:46
我有一个窗口显示服务,带有一个由视图调用的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();
}
看起来它可以更简单地完成,并且没有挂起的线程:
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;