gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:43 25 4
gpt4 key购买 nike

我有一个显示服务的窗口,其中包含一个由 View 调用的 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;

关于c# - 使用事件等待句柄来阻止窗口关闭,然后包装为异步等待。可以接受吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26382189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com