首页 >> 读书频道 >> 电脑 >> 利用Visual C#实现Windows管道技术
 
· 用C#开发.NET CF
· 页面数据缓存
· 用C#和本地Window
· 页面输出缓存
· 在C#程序设计中使用Wi
· 性能优化
· 一个简单的Web Ser
· 用Visual C#打造
· C#编程实现Excel文
· C#中利用mediapl
· Web service简
· Visual C#编程入
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

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


查看有无更新版本

关键字:VC 2006-9-20

 

管道技术一般采用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();
为了不阻塞主线程,可以将整个过程放到一个另一个线程里就可以了
管道技术一般采用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();
为了不阻塞主线程,可以将整个过程放到一个另一个线程里就可以了

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

[ 1 ]
利用Visual C#实现Windows管道技术 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑