欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【C#】winform设计一个等待窗口

【C#】winform设计一个等待窗口

2025/7/6 8:20:49 来源:https://blog.csdn.net/weixin_44939430/article/details/145976707  浏览:    关键词:【C#】winform设计一个等待窗口

🔥 WaitingForm 关闭时机 & 方法

你的 WaitingForm 是一个加载窗口,通常在 长时间任务结束后 关闭,常见的关闭方式有 3 种


✅ 方法 1:任务完成后自动关闭(推荐)

适用于 任务执行完毕后自动关闭 WaitingForm

🔹 修改 btnLongTask_Click 代码

private void btnLongTask_Click(object sender, EventArgs e)
{WaitingForm waitingForm = new WaitingForm(this);waitingForm.Show(); // 先显示等待窗口Task.Run(() =>{LongRunningTask(); // 模拟执行长时间任务this.Invoke(new Action(() =>{waitingForm.Close(); // 任务完成后关闭窗口}));});
}

📌 关键点:

  • waitingForm.Show(); 让等待窗口显示
  • Task.Run 异步执行任务,避免阻塞主线程
  • this.Invoke(new Action(() => waitingForm.Close())); 跨线程关闭窗口

✅ 方法 2:按钮手动关闭

适用于 用户可以手动取消等待

🔹 WaitingForm 添加 取消 按钮

public partial class WaitingForm : Form
{private Button btnCancel;public WaitingForm(Form parentForm){InitializeComponent();this.StartPosition = FormStartPosition.Manual;this.Size = new Size(250, 120);Label lblMessage = new Label();lblMessage.Text = "操作正在进行,请勿操作...";lblMessage.ForeColor = Color.White;lblMessage.AutoSize = true;lblMessage.Font = new Font("Microsoft YaHei", 12, FontStyle.Bold);lblMessage.Location = new Point(30, 30);btnCancel = new Button();btnCancel.Text = "取消";btnCancel.Location = new Point(80, 70);btnCancel.Click += BtnCancel_Click;this.Controls.Add(lblMessage);this.Controls.Add(btnCancel);if (parentForm != null){int x = parentForm.Left + (parentForm.Width - this.Width) / 2;int y = parentForm.Top + (parentForm.Height - this.Height) / 2;this.Location = new Point(x, y);}}private void BtnCancel_Click(object sender, EventArgs e){this.Close(); // 点击取消按钮时关闭窗口}
}

📌 关键点

  • 增加一个“取消”按钮
  • 用户可以手动点击关闭等待窗口

✅ 方法 3:任务超时自动关闭

适用于 任务执行超时时,自动关闭 WaitingForm

🔹 修改 btnLongTask_Click 代码

private void btnLongTask_Click(object sender, EventArgs e)
{WaitingForm waitingForm = new WaitingForm(this);waitingForm.Show();Task.Run(() =>{bool isCompleted = LongRunningTaskWithTimeout(5000); // 5秒超时this.Invoke(new Action(() =>{waitingForm.Close();if (!isCompleted){MessageBox.Show("任务超时,已自动关闭等待窗口!");}}));});
}// 模拟任务:超时返回 false,完成返回 true
private bool LongRunningTaskWithTimeout(int timeout)
{int elapsedTime = 0;while (elapsedTime < timeout){Thread.Sleep(500); // 模拟任务执行elapsedTime += 500;}return elapsedTime < timeout;
}

📌 关键点

  • 任务超时(如 5 秒)时自动关闭等待窗口
  • 超时后给用户提示
  • 任务完成则正常关闭

🔥 小结

关闭方式适用场景关键代码
方法 1:任务完成后自动关闭 (推荐)任务完成后自动关闭等待窗口waitingForm.Close();
方法 2:手动点击关闭用户可以手动取消等待btnCancel.Click += BtnCancel_Click;
方法 3:超时自动关闭任务超时后自动关闭if (!isCompleted) { MessageBox.Show("任务超时"); }

避免阻塞主线程,自动关闭最友好!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词