C\#동적 출력 Dos 명령 실행 결과 의 인 스 턴 스(원본 코드 첨부)
개술
C\#프로그램 개발 과정 에서 다른 프로그램 을 실행 하고 출력 결 과 를 얻어 진일보 한 처 리 를 해 야 할 때 가 있다.일반적으로 제3자 프로그램 은 주로 프로 세 스 를 통 해 호출 되 는데 제3자 프로그램 이 실행 되 는 과정 에서 정 보 를 얻 을 수 있다 면 편리 하고 유용 하 다.
관련 지식 포인트:
다음 과 같 습 니 다.[명령 이 완료 되면 자동 으로 끝 납 니 다.프로 세 스 를 중단 하면 수 동 으로 프로 세 스 끝 을 클릭 할 수 있 습 니 다]:
핵심 코드
주요 코드 는 다음 과 같 습 니 다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DemoBat
{
public partial class MainForm : Form
{
private BatStatus curBatSataus = BatStatus.NONE;
private Process curProcess = new Process();
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
InitInfo();
}
private void InitInfo()
{
curProcess.OutputDataReceived -= new DataReceivedEventHandler(ProcessOutDataReceived);
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = "cmd.exe";
//p.Arguments = " -t 192.168.1.103";
p.UseShellExecute = false;
p.WindowStyle = ProcessWindowStyle.Hidden;
p.CreateNoWindow = true;
p.RedirectStandardError = true;
p.RedirectStandardInput = true;
p.RedirectStandardOutput = true;
curProcess.StartInfo = p;
curProcess.Start();
curProcess.BeginOutputReadLine();
curProcess.OutputDataReceived += new DataReceivedEventHandler(ProcessOutDataReceived);
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStart_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(this.txtCommand.Text.Trim()))
{
MessageBox.Show(" ");
}
if (curBatSataus != BatStatus.ON)
{
curProcess.StandardInput.WriteLine(this.txtCommand.Text.Trim());
curBatSataus = BatStatus.ON;
}
else {
MessageBox.Show(" , ");
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStop_Click(object sender, EventArgs e)
{
if (curBatSataus == BatStatus.ON)
{
curProcess.CancelOutputRead();//
curProcess.Kill();
curBatSataus = BatStatus.OFF;
// ,
InitInfo();
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void ProcessOutDataReceived(object sender, DataReceivedEventArgs e)
{
if (this.txtOutPutInfo.InvokeRequired)
{
this.txtOutPutInfo.Invoke(new Action(() =>
{
this.txtOutPutInfo.AppendText(e.Data + "\r
");
}));
}
else {
this.txtOutPutInfo.AppendText(e.Data + "\r
");
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if ((string.IsNullOrEmpty(this.curProcess.StartInfo.FileName) || this.curProcess.StandardInput.BaseStream.CanWrite) && curBatSataus != BatStatus.OFF)
{
curBatSataus = BatStatus.OFF;
}
}
}
/// <summary>
///
/// </summary>
public enum BatStatus {
NONE = 0,
ON = 1,
OFF = 2
}
}
비고:명령 행 실행 과정 에서[예:Ping 192.168.1.100-t]단축 키[예:Ctrl+C]를 입력 하 는 방법 에 대해 서 는 아직 실현 되 지 않 았 습 니 다.현재 사용 하고 있 는 프로 세 스 강제 종료 방법
원본 코드 다운로드
이상 은 C\#동적 출력 Dos 명령 실행 결과 의 인 스 턴 스(원본 코드 첨부)에 대한 상세 한 내용 입 니 다.C\#동적 출력 Dos 명령 실행 결과 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.