Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371226
  • 博文数量: 150
  • 博客积分: 3423
  • 博客等级: 中校
  • 技术积分: 1005
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-15 09:04
文章分类

全部博文(150)

文章存档

2012年(2)

2011年(148)

分类: 嵌入式

2011-07-23 10:03:59

主要实现启动控制台程序,把输出重定向到文本框中:
  1. //调用函数,  
  2.         public void Exe(string filename, string args)  
  3.         {  
  4.             Process cmd = new Process();  
  5.             cmd.StartInfo.FileName = filename;  
  6.             cmd.StartInfo.Arguments = args;  
  7.             //将cmd的标准输入和输出全部重定向到.NET的程序里   
  8.             cmd.StartInfo.RedirectStandardInput = true;//标准输入   
  9.             cmd.StartInfo.RedirectStandardOutput = true;//标准输出   
  10.             cmd.StartInfo.UseShellExecute = false;//此处必须为false否则引发异常   
  11.             //  
  12.             cmd.StartInfo.CreateNoWindow = true;//不显示命令行窗口  
  13.             cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;  
  14.             //  
  15.             ThreadPool.QueueUserWorkItem(new WaitCallback(ExeThread), cmd);  
  16.         }  
  17.         private void ExeThread(object obj)  
  18.         {  
  19.             Process cmd = obj as Process;  
  20.             cmd.Start();  
  21.             cmd.OutputDataReceived += new DataReceivedEventHandler(cmd_OutputDataReceived);  
  22.             cmd.BeginOutputReadLine();  
  23.             //  
  24.             Application.DoEvents();  
  25.             cmd.WaitForExit();  
  26.             if (cmd.ExitCode != 0)  
  27.             {  
  28.                 ShowMessage(cmd.StandardOutput.ReadToEnd());  
  29.             }  
  30.             cmd.Close();  
  31.         }  
  32.         void cmd_OutputDataReceived(object sender, DataReceivedEventArgs e)  
  33.         {  
  34.             ShowMessage(e.Data);  
  35.         }  
  36.         private delegate void ShowMessageHandler(string msg);  
  37.         private void ShowMessage(string msg)  
  38.         {  
  39.             if (this.InvokeRequired)  
  40.             {  
  41.                 this.BeginInvoke(new ShowMessageHandler(ShowMessage), new object[] { msg });  
  42.             }  
  43.             else  
  44.             {  
  45.                 if (msg != null)  
  46.                 {  
  47.                     textBox1.AppendText(msg + "/r/n");  
  48.                 }  
  49.             }  
  50.         }  
阅读(3291) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~