欢迎光临
我们一直在努力

C#实现Window管道技术-.NET教程,C#语言

建站超值云服务器,限时71元/月

之前发了一篇使用window api来实现管道技术的文章,后来改用c#来实现相同的效果,发现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();

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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » C#实现Window管道技术-.NET教程,C#语言
分享到: 更多 (0)