C# 如何等待一个form 关闭返回值
时间: 2024-11-04 15:10:44 浏览: 23
在C#中,如果你想要等待一个Form关闭并获取其结果,你可以通过事件处理和异步编程的方式来实现。Form通常有一个Closing事件,当用户尝试关闭它时会被触发。这里是一个简单的示例:
```csharp
using System;
using System.Windows.Forms;
public partial class MainForm : Form
{
private DialogResult result;
public MainForm()
{
InitializeComponent();
}
// 在这个方法里做需要关闭Form的操作,并设置结果
private void OnClose()
{
result = MessageBox.Show("确定要退出吗?", "确认", MessageBoxButtons.YesNo);
}
// 当Form即将关闭时,调用OnClose方法
protected override async void OnClosing(CancelEventArgs e)
{
await Task.Run(() => OnClose());
if (result == DialogResult.Yes) // 如果用户选择"是"
e.Cancel = true; // 阻止默认关闭操作,后续可以继续执行其他任务
else
Close(); // 否则关闭Form
}
}
// 然后在主程序或者启动的地方创建这个Form实例,并添加监听关闭事件
public static async Task Main()
{
Application.Run(new MainForm());
// 这里并不能直接获取到Form关闭的结果,因为Main方法会在Application.Run之前结束。如果你想在Main之外的地方获取结果,
// 可以考虑把OnClose方法的结果存储在一个全局变量或者静态字段中,或者使用TaskCompletionSource来异步跟踪结果完成。
}
```
注意,在`Main`函数中,由于线程限制,无法立即获取到关闭后的返回值。上述代码更多地展示了如何阻止或允许Form的关闭,并不是提供了一个实时获取关闭结果的方法。
阅读全文