利用VisualC#实现Window管道技术

利用VisualC#实现Window管道技术,第1张

利用VisualC#实现Window管道技术,第2张

一般来说,管道技术是通过窗口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();

为了不阻塞主线程,可以把整个进程放在另一个线程中。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 利用VisualC#实现Window管道技术

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情