|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
无论谁倒了对双方阵营的粉丝们也是有害无益。visual|window 管道手艺一样平常接纳WindowAPI来完成,比来我试着用C#来完成Windows管道手艺,发明C#自己便利的历程线程机制使事情变得复杂至极,顺手纪录一下,保举给人人。
起首,我们能够经由过程设置Process类,猎取输入接口,代码以下:
Processproc=newProcess();
proc.StartInfo.FileName=strScript;
proc.StartInfo.WorkingDirectory=strDirectory;
proc.StartInfo.CreateNoWindow=true;
proc.StartInfo.UseShellExecute=false;
proc.StartInfo.RedirectStandardOutput=true;
proc.Start();
然后设置线程一连读取输入的字符串:
eventOutput=newAutoResetEvent(false);
AutoResetEvent[]events=newAutoResetEvent[1];
events[0]=m_eventOutput;
m_threadOutput=newThread(newThreadStart(DisplayOutput));
m_threadOutput.Start();
WaitHandle.WaitAll(events);
线程函数以下:
privatevoidDisplayOutput()
{
while(m_procScript!=null&&!m_procScript.HasExited)
{
stringstrLine=null;
while((strLine=m_procScript.StandardOutput.ReadLine())!=null)
{
m_txtOutput.AppendText(strLine+"
");
m_txtOutput.SelectionStart=m_txtOutput.Text.Length;
m_txtOutput.ScrollToCaret();
}
Thread.Sleep(100);
}
m_eventOutput.Set();
}
这里要注重的是,利用以下语句使TextBox显现的老是最新增加的,而AppendText而不利用+=,是由于+=会形成全部TextBox的回显使得全部显现地区闪灼
m_txtOutput.AppendText(strLine+"
");
m_txtOutput.SelectionStart=m_txtOutput.Text.Length;
m_txtOutput.ScrollToCaret();
为了不堵塞主线程,能够将全部历程放到一个另外一个线程里就能够了
我觉得这个学习方法很重要。初学者应该跟我一样有同样一个毛病。那就是急于求成。很想就自己做出个小小的系统来。可真要动手,却又茫然而不知所措。为什么会这样呢?因为我们没有耐心去学习基础知识。写根本看不到什么效果的测试代码。 |
|