C#管道技术学习经验

开发 后端
这里介绍C#管道技术一般采用Window API来实现,最近我试着用C#管道技术,发现C#本身方便的进程线程机制使工作变得简单至极。

C#管道技术一般采用Window API来实现,最近我试着用C#管道技术,发现C#本身方便的进程线程机制使工作变得简单至极,随手记录一下,推荐给大家。

首先,我们可以通过设置Process类,获取输出接口,代码如下:

  1. Process proc = new Process();  
  2. proc .StartInfo.FileName = strScript;  
  3. proc .StartInfo.WorkingDirectory = strDirectory;  
  4. proc .StartInfo.CreateNoWindow = true;  
  5. proc .StartInfo.UseShellExecute = false;  
  6. proc .StartInfo.RedirectStandardOutput = true;  
  7. proc .Start();  

然后设置线程连续读取输出的字符串:

  1. eventOutput = new AutoResetEvent(false);  
  2. AutoResetEvent[] events = new AutoResetEvent[1];  
  3. events[0] = m_eventOutput;  
  4.  
  5. m_threadOutput = new Thread( new ThreadStart( DisplayOutput ) );  
  6. m_threadOutput.Start();  
  7. WaitHandle.WaitAll( events );  

线程函数如下:

  1. private void DisplayOutput()  
  2. {  
  3.  while ( m_procScript != null && !m_procScript.HasExited )  
  4.  {  
  5.   string strLine = null;  
  6.   while ( ( strLine = m_procScript.StandardOutput.ReadLine() ) != null)  
  7.   {  
  8.    m_txtOutput.AppendText( strLine + "\r\n" );  
  9.    m_txtOutputm_txtOutput.SelectionStart = m_txtOutput.Text.Length;  
  10.    m_txtOutput.ScrollToCaret();  
  11.   }  
  12.   Thread.Sleep( 100 );  
  13.  }  
  14.  m_eventOutput.Set();  

这里要注意的是,使用以下语句使TextBox显示的总是***添加的,而AppendText而不使用+=,是因为+=会造成整个TextBox的回显使得整个显示区域闪烁

  1. m_txtOutput.AppendText( strLine + "\r\n" );  
  2. m_txtOutput.SelectionStart = m_txtOutput.Text.Length;  
  3. m_txtOutput.ScrollToCaret();  

为了不阻塞主线程,可以将整个过程放到一个另一个线程里就可以了,以上介绍C#管道技术

【编辑推荐】

  1. C#参数类型学习笔记
  2. 处理C#消息的方法
  3. C#重载LoadPostData方法
  4. 概述C#复合控件构建
  5. C# JavaScript函数使用
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-01 13:00:05

C#实现Windows

2009-08-19 10:25:18

C#托管资源

2009-08-13 18:13:27

C#学习经验

2009-08-20 15:33:03

C#跳跃语句

2009-08-25 16:14:06

C#使用ADOX

2009-08-31 15:48:02

C# Singleto

2009-08-26 17:24:49

C# Mutex对象

2009-08-27 14:44:11

C# interfac

2009-08-24 17:06:37

C#字符串

2009-08-28 16:43:57

C#多线程学习

2009-08-31 16:51:11

C# Main()方法

2009-08-27 09:27:49

C#扩展方法

2009-08-28 10:31:47

C#字符ASCII码

2009-08-12 15:55:12

C#接口定义

2009-08-11 14:20:41

C# .NET学习经验

2009-08-27 13:45:45

C#别名指示符

2009-09-04 14:30:28

C#读取BLOB数据

2009-08-24 16:02:10

C# Windows应

2009-08-24 17:34:14

C#创建XML Web

2009-08-24 15:50:23

C# 泛型C# 泛型委托
点赞
收藏

51CTO技术栈公众号