在C#中实现Window管道技术

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

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

Process proc = new Process();
proc .StartInfo.FileName = strScript;
proc .StartInfo.WorkingDirectory = strDirectory;
proc .StartInfo.CreateNoWindow = true;
proc .StartInfo.UseShellExecute = false;
proc .StartInfo.RedirectStandardOutput = true;
proc .Start();

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

eventOutput = new AutoResetEvent(false);
AutoResetEvent[] events = new AutoResetEvent[1];
events[0] = m_eventOutput;
m_threadOutput = new Thread( new ThreadStart( DisplayOutput ) );
m_threadOutput.Start();
WaitHandle.WaitAll( events );

线程函数如下:

private void DisplayOutput()
{
 while ( m_procScript != null && !m_procScript.HasExited )
 {
  string strLine = null;
  while ( ( strLine = m_procScript.StandardOutput.ReadLine() ) != null)
  {
   m_txtOutput.AppendText( strLine + "\r\n" );
   m_txtOutput.SelectionStart = m_txtOutput.Text.Length;
   m_txtOutput.ScrollToCaret();
  }
  Thread.Sleep( 100 );
 }
 m_eventOutput.Set();
}

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

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

为了不阻塞主线程,可以将整个过程放到一个另一个线程里就可以了

时间: 2024-08-29 07:36:51

在C#中实现Window管道技术的相关文章

利用Visual C#实现Windows管道技术

visual|window 管道技术一般采用Window API来实现,最近我试着用C#来实现Windows管道技术,发现C#本身方便的进程线程机制使工作变得简单至极,随手记录一下,推荐给大家. 首先,我们可以通过设置Process类,获取输出接口,代码如下: Process proc = new Process();proc .StartInfo.FileName = strScript;proc .StartInfo.WorkingDirectory = strDirectory;proc

Windows管道技术简述

不知你是否用过这样的程序,他们本身并没有解压缩的功能,而是调用DOS程序PKZIP完成ZIP包的解压缩.但是在程序运行时又没有DOS控制台的窗口出现而且一切本应该在DOS下显示的信息都出现在了那个安装程序的一个文本框里.这种设计既美观又可以防止少数眼疾手快的用户提前关了你的DOS窗口. 现在就来讨论一下,如何用匿名管道技术实现这个功能. 管道技术由来已久,相信不少人对DOS命令里的管道技术最为熟悉.当我们type一个文件的时候如果想让他分页现实可以输入 C:\>type autoexec.bat

VC管道技术

不知你是否用过这样的程序,他们本身并没有解压缩的功能,而是调用DOS程序PKZIP完成ZIP包的解压缩.但是在程序运行时又没有DOS控制台的窗口出现而且一切本应该在DOS下显示的信息都出现在了那个安装程序的一个文本框里.这种设计既美观又可以防止少数眼疾手快的用户提前关了你的DOS窗口. 现在就来讨论一下,如何用匿名管道技术实现这个功能. 管道技术由来已久,相信不少人对DOS命令里的管道技术最为熟悉.当我们type一个文件的时候如果想让他分页现实可以输入 C:\\>type autoexec.ba

年供1500万吨中俄原油管道10月贯通

每经记者 喻春来 发自北京 8月2日,<每日经济新闻>获悉,历时十余年建设的中俄原油管道有望在10月底贯通投产,管道建成后俄罗斯将实现向中国年供原油1500万吨,以后将进一步增加供油量.此举标志着作为中国四大原油进口通道的东北油气通道正式打通. 据悉,中石油与俄罗斯石油工业股份有限公司(Rosneft)目前已敲定了进口原油长约合同和价格.分析人士认为,由俄罗斯东西伯利亚-太平洋石油管道出口ESPO原油的价格可能是与迪拜原油挂钩的,可能还要低一些. 中国东北油气通道正式打通 中国石油管道局内部权

中英文对照Stargate中的科学与技术_中英文对照

Stargate 作为一部延续了十年的硬科幻,不仅继承了其前辈的"科学"体系,又有自己的创新和挖掘,其中涉及到的科学与技术涵盖空间技术.物理学.能源与动力科学.生命科学.计算机科学.哲学与社会科学等诸多领域,不仅满足了观众对新技术的猎奇,也在一定程度上透射出人类文明的发展方向,而这正是科幻的本质所在.本文作者作为SG系列的忠实fans,保持了平均每集5+遍的观看记录,在这里希望能够整理一下Stargate中出现的科学与技术, 并与传统科幻的体系和现实中的原型做比较,希望能够让更多的人了

CSS中的滑动门技术

css 原文作者:Douglas Bowman 原文出自:A List Apart 中文翻译:54player.com nobita 版权说明:本文中文翻译版权归译者54player.com nobita所有.需要转载发表的,请先与作者联系 在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果.根据CSS2.0当前的规定,每一个背景图像都需要各自的HTML元素.在许多情况下,典型的标记已经为一般的接口组件提供了多种元素以供我们使用. 标

javascript-Javascript中出现window未定义,zepto未定义时该如何解决

问题描述 Javascript中出现window未定义,zepto未定义时该如何解决 Javascript中出现window未定义,zepto未定义时该如何解决

Ajax基础必读:AJAX中的一些关键技术

ajax ajax架构中主要涉及的技术:client: javascript解析xml, 操纵DOM修改html页面,javascript是"OO"的语言.server: servlet + dao, 实现service接口即可 下面是client中主要的代码:1.JS中封装解析xml的代码,以及实例应用. Quote //类的构造,传入xml文档和需要处理的标签名称function DataSet(xmldoc, tagLabel) {this.rootObj = xmldoc.ge

在.NET中使用命名管道完成进程间通信

进程 你曾经需要在同一台机器的两个.NET应用程序间进行数据交换吗?例如,一个Web站点和一个Windows服务?.NET框架提供了几种好的选择来完成进程间通信(IPC):Web Service,Remoting.最快的是Remoting,因为它使用TCP通道和二进制格式. 然而,如果需要频繁地从一个应用程序调用另外一个应用程序,并且你主要关心的是性能,Remoting还是显得慢了一点.让Remoting变慢的,不是协议,而是序列化. 通常来说,Remoting是很不错的,但如果仅限于本地机器的