ZBLOG

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

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

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

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

完整代码示例

using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace CmdExecutor
{
    public partial class MainForm : Form
    {
        private Process cmdProcess;

        public MainForm()
        {
            InitializeComponent();
        }

        private void btnExecute_Click(object sender, EventArgs e)
        {
            ExecuteCommand("your_command_here"); // 替换成您想要执行的CMD命令
        }

        private void ExecuteCommand(string command)
        {
            cmdProcess = new Process();
            cmdProcess.StartInfo.FileName = "cmd.exe";
            cmdProcess.StartInfo.Arguments = "/C " + command; // /C 表示执行完命令后终止CMD
            cmdProcess.StartInfo.RedirectStandardOutput = true; // 重定向输出流
            cmdProcess.StartInfo.UseShellExecute = false;      // 不使用操作系统外壳启动进程
            cmdProcess.StartInfo.CreateNoWindow = true;       // 不创建窗口
            
            cmdProcess.OutputDataReceived += CmdProcess_OutputDataReceived; // 添加事件处理器

            cmdProcess.Start(); // 启动进程
            cmdProcess.BeginOutputReadLine(); // 开始异步读取输出
        }

        private void CmdProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (!string.IsNullOrEmpty(e.Data))
            {
                AppendTextToTextBox(e.Data);
            }
        }

        private void AppendTextToTextBox(string text)
        {
            if (textBoxOutput.InvokeRequired)
            {
                textBoxOutput.Invoke(new Action<string>(AppendTextToTextBox), text);
                return;
            }
            
            textBoxOutput.AppendText(text + Environment.NewLine);
            textBoxOutput.ScrollToCaret(); // 滚动到文本框底部以查看最新输出
        }

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);

            if (cmdProcess != null && !cmdProcess.HasExited)
            {
                var result = MessageBox.Show("正在执行CMD命令,确认要关闭吗?", "确认", MessageBoxButtons.YesNo);

                if (result == DialogResult.Yes)
                {
                    try
                    {
                        cmdProcess.Kill();  // 终止进程
                        cmdProcess.Dispose(); // 释放资源
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"无法终止进程: {ex.Message}");
                    }
                }
                else
                {
                    e.Cancel = true; // 取消关闭操作
                }
           }
       }
   }
}

界面设计

  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

注册

已经有帐号?