您的位置:首页 > 编程语言 > C#

C#运行外部程序并后台等待...

2017-09-15 10:08 387 查看
   备忘一下, 用ThreadPool开一个后台线程,在里面用Process对象执行指定外部应用,然后后台等待:

CardBean lvBean = getCardByPosition(e.ColumnIndex, e.RowIndex);
if (lvBean.status == CardBean.STATUS.stTesting) return;
ThreadPool.QueueUserWorkItem(new WaitCallback((object obj) =>
{
Process lvProc = new Process();
lvProc.StartInfo = new ProcessStartInfo(lvBean.exepath);
try
{
lvProc.Start();
lvBean.status = CardBean.STATUS.stTesting;
saveConfig();
dataGridView1.Invoke(new VoidDelegate(() => {
tslbl_label.Text = "正在运行\"" + lvBean.exepath + "\"...";
rebuildUI(mCards);
}));

lvProc.WaitForExit();
//check result
if (!File.Exists(lvBean.resultpath))
{
lvBean.status = CardBean.STATUS.stDoneNG;
}
else
{
string lvRet = getFileContent(lvBean.resultpath);
if (lvRet.ToUpper().Contains("PASS"))
{
lvBean.status = CardBean.STATUS.stDoneOK;
}
else if (lvRet.ToUpper().Contains("FAIL"))
{
lvBean.status = CardBean.STATUS.stDoneNG;
}
else{
MessageBox.Show(lvBean.resultpath + " 没有包含有效识别符.");
lvBean.status = CardBean.STATUS.stUntest;
}

}

saveConfig();
dataGridView1.Invoke(new VoidDelegate(() => {
tslbl_label.Text = "";
rebuildUI(mCards);
}));
}
catch (Exception ee)
{
dataGridView1.Invoke(new VoidDelegate(() => {
MessageBox.Show(ee.Message, Properties.Resources.LBL_ERROR, MessageBoxButtons.OK, MessageBoxIcon.Error);
}));
}
}));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c#
相关文章推荐