You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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变量,这里给每个窗体实例起了不同的名称(crystalXFormform1),解决编译错误
  • 合理的窗体资源管理:如果Form2后续不再需要使用,用this.Close()替代this.Hide(),可以及时释放窗体占用的资源

内容的提问来源于stack exchange,提问作者Purify

火山引擎 最新活动