C\#동적 출력 Dos 명령 실행 결과 의 인 스 턴 스(원본 코드 첨부)

본 고 는 명령 행 정 보 를 텍스트 상자 에 실시 간 으로 출력 하 는 방법 을 간단 한 예 로 설명 한다.학습 공유 용 으로 만 제공 되 며 부족 한 점 이 있 으 면 지적 해 주 십시오.
개술
C\#프로그램 개발 과정 에서 다른 프로그램 을 실행 하고 출력 결 과 를 얻어 진일보 한 처 리 를 해 야 할 때 가 있다.일반적으로 제3자 프로그램 은 주로 프로 세 스 를 통 해 호출 되 는데 제3자 프로그램 이 실행 되 는 과정 에서 정 보 를 얻 을 수 있다 면 편리 하고 유용 하 다.
관련 지식 포인트:
  • 프로 세 스 관련 클래스:Process,ProcessStartInfo,프로 세 스 의 리 셋 출력 과 데 이 터 를 받 아들 이 는 이 벤트 를 설정 합 니 다.
  • 텍스트 상자 작업:여러 줄 표시,스크롤 바 는 항상 맨 아래 에 있 습 니 다.
  • 효과 도
    다음 과 같 습 니 다.[명령 이 완료 되면 자동 으로 끝 납 니 다.프로 세 스 를 중단 하면 수 동 으로 프로 세 스 끝 을 클릭 할 수 있 습 니 다]:

    핵심 코드
    주요 코드 는 다음 과 같 습 니 다.
    
    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 명령 실행 결과 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기