要在 WinForms 应用程序中执行 CMD 命令,并将命令的输出实时显示到 TextBox 中,同时支持在关闭窗体时终止 CMD 命令的执行,可以按以下步骤实现:
- 创建一个新的 Windows Forms 应用程序。
- 添加一个 TextBox 用于显示 CMD 输出,并设置其
Multiline
属性为true
和ScrollBars
为Vertical
。 - 添加一个 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; // 取消关闭操作
}
}
}
}
}
界面设计
创建一个名为
MainForm
的窗体。在窗体上放置以下控件:
一个 TextBox,名称设置为
textBoxOutput
,属性设置如下:- Multiline: true
- ScrollBars: Vertical
一个 Button,名称设置为
btnExecute
,文本可以设置为“执行命令”。
注意事项
- 替换
your_command_here
为实际需要执行的 CMD 命令(例如:ping google.com
)。 - 使用
/C
参数表示在完成命令后立即退出 CMD。如果希望在结束时保留窗口,则可改为使用/K
。 - 该实现通过重定向标准输出,以便实时捕获并显示 CMD 的输出信息。
- 当您尝试关闭窗口时,将弹出对话框提示是否继续关闭,如果用户选择“是”,则会尝试结束 CMD 进程。
内容由零声教学AI助手提供,问题来源于学员提问