社区编辑申请
注册/登录
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-08-21 17:19:36

C#网络编程入门

2009-08-13 12:50:45

C#基础知识

2009-08-03 13:55:03

C#基础知识

2021-06-06 13:08:22

C#特性Attribute

2009-09-01 13:00:05

C#实现Windows

2009-08-19 10:25:18

C#托管资源

2009-08-11 14:20:41

C# .NET学习经验

2009-08-13 18:13:27

C#学习经验

2009-08-19 16:59:25

C# 操作符

2009-08-14 15:54:12

C#编程语言

2009-08-13 10:52:03

C#基础概念

2009-08-13 18:21:52

2009-08-25 17:59:49

C#入门

2009-09-02 17:10:45

C#语言入门

2021-12-01 09:23:13

2009-08-25 17:49:07

C#入门

2009-09-01 18:36:35

C#委托实例

2009-08-06 17:42:32

2009-08-27 16:54:59

C#开发技巧

2009-08-11 15:44:05

C#基本技巧

同话题下的热门内容

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!Python轻量级Web框架:Bottle库!Python居然被用来开发游戏了?盘点你想不到的Python开发场景用了那么久的Lombok,你知道它的原理么?实战 | 如何用 Python 自动化监控文件夹完成服务部署!Fury:一个基于JIT动态编译的高性能多语言原生序列化框架细思恐极,插上U盘就开始执行Python代码为什么 Python、Ruby 等语言弃用了自增运算符?

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号