利用VisualC#实现Window管道技术
一般来说,管道技术是通过窗口API实现的。最近尝试用C#实现Windows管道技术,发现C#本身便捷的进程线程机制让工作变得异常简单。我想把它录下来,推荐给你。
首先,我们可以通过设置Process类得到输出接口,代码如下:
Process proc =新进程();
proc . startinfo . filename = strScript;
proc . startinfo . working directory = str directory;
proc . startinfo . createnowindow = true;
proc . startinfo . useshellexecute = false;
proc . startinfo . redirect standard output = true;
继续。start();
然后设置线程连续读取输出字符串:
event output = new AutoResetEvent(false);
AutoResetEvent[]events = new AutoResetEvent[1];
events[0]= m _ event output;
m _ Thread output = new Thread(new ThreadStart(display output));
m_threadOutputstart();
WaitHandle。WaitAll(事件);
线程功能如下:
private void display output()
{
while(m _ proc script!= null &&!m_procScript。has exited)
{
string strLine = null;
while((strLine = m _ proc script。StandardOutput.ReadLine())!= null)
{
m_txtOutput。append text(strLine+" \ r \ n ");
m_txtOutput。SelectionStart = m_txtOutput。文本。长度;
m_txtOutput。ScrollToCaret();
}
线程。睡眠(100);
}
m_eventOutput。set();
}
这里需要注意的是,下面的语句是用来让TextBox一直显示最新添加的,而AppendText不是用+=,因为+=会引起整个TextBox的回显,使整个显示区域闪烁。
m_txtOutput。append text(strLine+" \ r \ n ");
m_txtOutput。SelectionStart = m_txtOutput。文本。长度;
m_txtOutput。ScrollToCaret();
为了不阻塞主线程,可以把整个进程放在另一个线程中。
位律师回复
0条评论