ZBLOG

实现一个在winform程序中执行cmd命令,并将cmd日志实时输出到一个Texbox框。在中途关闭winform窗体时终止cmd命令的执行

要在 WinForms 应用程序中执行 CMD 命令,并将命令的输出实时显示到 TextBox 中,同时支持在关闭窗体时终止 CMD 命令的执行,可以按以下步骤实现:

  1. 创建一个新的 Windows Forms 应用程序
  2. 添加一个 TextBox 用于显示 CMD 输出,并设置其 Multiline 属性为 trueScrollBarsVertical
  3. 添加一个 Button,用于开始执行命令

下面是完整代码示例,包括处理窗口关闭事件来终止 CMD 进程:

完整代码示例

  1. using System;
  2. using System.Diagnostics;
  3. using System.Windows.Forms;
  4. namespace CmdExecutor
  5. {
  6. public partial class MainForm : Form
  7. {
  8. private Process cmdProcess;
  9. public MainForm()
  10. {
  11. InitializeComponent();
  12. }
  13. private void btnExecute_Click(object sender, EventArgs e)
  14. {
  15. ExecuteCommand("your_command_here"); // 替换成您想要执行的CMD命令
  16. }
  17. private void ExecuteCommand(string command)
  18. {
  19. cmdProcess = new Process();
  20. cmdProcess.StartInfo.FileName = "cmd.exe";
  21. cmdProcess.StartInfo.Arguments = "/C " + command; // /C 表示执行完命令后终止CMD
  22. cmdProcess.StartInfo.RedirectStandardOutput = true; // 重定向输出流
  23. cmdProcess.StartInfo.UseShellExecute = false; // 不使用操作系统外壳启动进程
  24. cmdProcess.StartInfo.CreateNoWindow = true; // 不创建窗口
  25. cmdProcess.OutputDataReceived += CmdProcess_OutputDataReceived; // 添加事件处理器
  26. cmdProcess.Start(); // 启动进程
  27. cmdProcess.BeginOutputReadLine(); // 开始异步读取输出
  28. }
  29. private void CmdProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
  30. {
  31. if (!string.IsNullOrEmpty(e.Data))
  32. {
  33. AppendTextToTextBox(e.Data);
  34. }
  35. }
  36. private void AppendTextToTextBox(string text)
  37. {
  38. if (textBoxOutput.InvokeRequired)
  39. {
  40. textBoxOutput.Invoke(new Action<string>(AppendTextToTextBox), text);
  41. return;
  42. }
  43. textBoxOutput.AppendText(text + Environment.NewLine);
  44. textBoxOutput.ScrollToCaret(); // 滚动到文本框底部以查看最新输出
  45. }
  46. protected override void OnFormClosing(FormClosingEventArgs e)
  47. {
  48. base.OnFormClosing(e);
  49. if (cmdProcess != null && !cmdProcess.HasExited)
  50. {
  51. var result = MessageBox.Show("正在执行CMD命令,确认要关闭吗?", "确认", MessageBoxButtons.YesNo);
  52. if (result == DialogResult.Yes)
  53. {
  54. try
  55. {
  56. cmdProcess.Kill(); // 终止进程
  57. cmdProcess.Dispose(); // 释放资源
  58. }
  59. catch (Exception ex)
  60. {
  61. MessageBox.Show($"无法终止进程: {ex.Message}");
  62. }
  63. }
  64. else
  65. {
  66. e.Cancel = true; // 取消关闭操作
  67. }
  68. }
  69. }
  70. }
  71. }

界面设计

  1. 创建一个名为 MainForm 的窗体。

  2. 在窗体上放置以下控件:

    • 一个 TextBox,名称设置为 textBoxOutput,属性设置如下:

      • Multiline: true
      • ScrollBars: Vertical
    • 一个 Button,名称设置为 btnExecute,文本可以设置为“执行命令”。

注意事项

  • 替换 your_command_here 为实际需要执行的 CMD 命令(例如:ping google.com)。
  • 使用 /C 参数表示在完成命令后立即退出 CMD。如果希望在结束时保留窗口,则可改为使用 /K
  • 该实现通过重定向标准输出,以便实时捕获并显示 CMD 的输出信息。
  • 当您尝试关闭窗口时,将弹出对话框提示是否继续关闭,如果用户选择“是”,则会尝试结束 CMD 进程。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?