ZBLOG

using System; using System.Diagnostics; using System.Threading.Tasks; using System.Windows.Forms; namespace CmdExecutor { public partial class MainForm : Form { private Process cmdProcess; // 用于保存当前执行的cmd进程 public MainFor...

您在代码中遇到的问题是,当窗口关闭时,虽然您尝试通过 cmdProcess.Kill() 来终止正在运行的命令,但是由于 OnFormClosing 方法中的逻辑可能没有正常执行。

首先,确保以下几点:

  1. 正确处理关闭事件:确保 OnFormClosing 事件处理程序中的逻辑可以正常执行。您可以添加一些调试信息,以确认是否进入了该逻辑。

  2. 检查 cmdProcess 的状态:在调用 cmdProcess.Kill() 前,可以再检查一次 cmdProcess.HasExited 的状态,以确定其确实处于活动状态。

  3. 捕获异常:在调用 cmdProcess.Kill() 时,最好用 try-catch 包裹,这样如果有异常发生,可以捕获并记录下来,而不是让应用崩溃。

以下是修改后的示例代码:

  1. protected override void OnFormClosing(FormClosingEventArgs e)
  2. {
  3. base.OnFormClosing(e);
  4. if (cmdProcess != null && !cmdProcess.HasExited)
  5. {
  6. var result = MessageBox.Show("正在执行CMD命令,确认要关闭吗?", "确认", MessageBoxButtons.YesNo);
  7. if (result == DialogResult.Yes)
  8. {
  9. try
  10. {
  11. // 终止进程
  12. cmdProcess.Kill();
  13. cmdProcess.Dispose(); // 释放资源
  14. }
  15. catch (Exception ex)
  16. {
  17. MessageBox.Show($"无法终止进程: {ex.Message}");
  18. }
  19. e.Cancel = false; // 允许关闭窗体
  20. }
  21. else
  22. {
  23. e.Cancel = true; // 取消关闭操作
  24. }
  25. }
  26. }

另外,请注意在此代码段中,在需要的时候使用了 Dispose() 方法来释放与进程相关的资源。

调试建议

  • 在 Windows 窗体应用中调试时,可以使用 Debug 输出调试信息,例如:
  1. Debug.WriteLine("Attempting to close the form...");
  • 您也可以考虑使用更简化的方法来停止进程,例如发送一个简单的退出命令,而不是强行杀死它。在某些情况下,这会更优雅地处理 CMD 中正在运行的任务。

注意事项

  • 如果您的 CMD 命令本身包含了对其他外部资源或线程的调用,那么简单地杀掉 CMD 窗口可能不会立即结束所有相关的操作。
  • 有时,您可能还需要考虑错误处理和用户反馈,以确保用户了解当前系统状态。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19546

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?