如何在Visual Studio C# Windows Forms App .Net Framework中实现30分钟后关闭Form2并显示Form1?
解决按钮点击后的异步等待与窗体切换问题
嘿,我看你这段代码里的等待逻辑有几个问题需要调整:直接写同步等待会卡死UI线程,而且还重复定义了同名变量,会导致编译报错。我给你优化一下代码,用异步方式实现需求,既不影响用户操作,逻辑也更清晰:
修改后的完整代码
private async void button1_Click_1(object sender, EventArgs e) { // 弹出成功提示框 MessageBox.Show("Thank you for using Crystal X!", "Success"); // 隐藏当前Form2,显示CrystalX窗体 this.Hide(); CrystalX crystalXForm = new CrystalX(); crystalXForm.Show(); // 异步等待30分钟,不会阻塞UI线程 await Task.Delay(TimeSpan.FromMinutes(30)); // 关闭当前Form2(若后续无需复用,Close比Hide更节省资源) this.Close(); // 显示Form1窗体 Form1 form1 = new Form1(); form1.Show(); }
关键优化点说明
- 异步等待避免UI阻塞:把按钮点击方法声明为
async void,用await Task.Delay(...)替代同步等待,这样等待过程中UI仍然可以响应操作,不会出现假死状态 - 修复变量命名冲突:原代码里重复定义了
main变量,这里给每个窗体实例起了不同的名称(crystalXForm、form1),解决编译错误 - 合理的窗体资源管理:如果Form2后续不再需要使用,用
this.Close()替代this.Hide(),可以及时释放窗体占用的资源
内容的提问来源于stack exchange,提问作者Purify




