C#多线程问题

卡卡Gemini 2010-06-08 02:49:25
采用的是backgroundworker,下面是里面的函数,主要就是调用一个后台对程序进行编译的过程,showdrawform是一个委托,里面会建立一个窗体(我知道这样做可能不太合理,但是我没有更好的办法),说下程序的功能:

通过dos命令,进入相关目录,然后执行命令编译,编译完生成文件1(对应命令setever),然后执行命令转换(对应命令converse),转换完生成文件2,然后启用showdrawform函数,生成一个对话框。在此对话框From_Load事件中会去读取文件2,但是现在执行这段代码会卡死,请大家参谋下
private void OnBackgroundWorker1DoWork(object sender, DoWorkEventArgs e)
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd");
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = false;


System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi);

p.StandardInput.WriteLine(@"cd\");
p.StandardInput.WriteLine(@"d:");
p.StandardInput.WriteLine(@"cd\");
p.StandardInput.WriteLine(@"cd ADS2008U2");
p.StandardInput.WriteLine(@"cd bin");
p.StandardInput.WriteLine(@"hpeesofmbshell_new");

Thread.Sleep(1000);

p.StandardInput.WriteLine(@"cd\");
p.StandardInput.WriteLine(@"c:");
p.StandardInput.WriteLine(@"cd\");
p.StandardInput.WriteLine(@"cd users");
p.StandardInput.WriteLine(@"cd default");
p.StandardInput.WriteLine(@"cd adsptolemy");
p.StandardInput.WriteLine(@"cd bin");
p.StandardInput.WriteLine(@"mbsetvars");
p.StandardInput.WriteLine(@"set SIMARCH=win32");

Thread.Sleep(100);

p.StandardInput.WriteLine(@"cd\");
p.StandardInput.WriteLine(@"e:");
p.StandardInput.WriteLine(@"cd\");
p.StandardInput.WriteLine(@"cd Project");
p.StandardInput.WriteLine(@"cd ADS");
//这里需要改
switch(this.SimulateType)
{
case "4_1_1":
{
p.StandardInput.WriteLine(@"cd SAM_SUC_AMUFA_PI4DQPSK_prj");
}
break;

case "4_1_2":
{
p.StandardInput.WriteLine(@"cd SAM_SUC_AMUFA_QPSK_prj");
}
break;

case "4_1_3":
{
p.StandardInput.WriteLine(@"cd SAM_SUC_AMUFA_NFsys_prj");
}
break;

case "4_1_4":
{
p.StandardInput.WriteLine(@"cd SAM_SUC_AMUFA_CNR_prj");
}
break;

case "4_1_5":
{
p.StandardInput.WriteLine(@"cd SAM_SUC_AMLFA_GComp_prj");
}
break;

case "4_1_11":
{
p.StandardInput.WriteLine(@"cd SAM_DUC_AMUFAMUFA_PI4DQPSK_prj");
}
break;

case "4_1_12":
{
p.StandardInput.WriteLine(@"cd SAM_DUC_AMUFAMUFA_QPSK_prj");
}
break;

case "4_1_13":
{
p.StandardInput.WriteLine(@"cd SAM_DUC_AMUFAMUFA_NFsys_prj");
}
break;

case "4_1_14":
{
p.StandardInput.WriteLine(@"cd SAM_DUC_AMUFAMUFA_CNR_prj");
}
break;

case "4_1_15":
{
p.StandardInput.WriteLine(@"cd SAM_DUC_AMUFAMUFA_GComp_prj");
}
break;

case "4_1_21":
{
p.StandardInput.WriteLine(@"cd SAM_SDC_AMFA_PI4DQPSK_prj");
}
break;

case "4_1_22":
{
p.StandardInput.WriteLine(@"cd SAM_SDC_AMFA_QPSK_prj");
}
break;

case "4_1_23":
{
p.StandardInput.WriteLine(@"cd SAM_SDC_AMFA_NFsys_prj");
}
break;

case "4_1_24":
{
p.StandardInput.WriteLine(@"cd SAM_SDC_AMFA_CNR_prj");
}
break;

case "4_1_25":
{
p.StandardInput.WriteLine(@"cd SAM_SDC_AMFA_GComp_prj");
}
break;

case "4_1_26":
{
p.StandardInput.WriteLine(@"cd SAM_DDC_AMFAMFA_PI4DQPSK_prj");
}
break;

case "4_1_27":
{
p.StandardInput.WriteLine(@"cd SAM_DDC_AMFAMFA_QPSK_prj");
}
break;

case "4_1_28":
{
p.StandardInput.WriteLine(@"cd SAM_DDC_AMFAMFA_NFsys_prj");
}
break;

case "4_1_29":
{
p.StandardInput.WriteLine(@"cd SAM_DDC_AMFAMFA_CNR_prj");
}
break;

case "4_1_30":
{
p.StandardInput.WriteLine(@"cd SAM_DDC_AMFAMFA_GComp_prj");
}
break;

case "4_2_1":
{
p.StandardInput.WriteLine(@"cd SAM_Analog_Channel_prj");
}
break;

case "4_2_2":
{
p.StandardInput.WriteLine(@"cd SAM_IFM_CORR_4_Channel_prj");
}
break;

case "4_3_1":
{
p.StandardInput.WriteLine(@"cd SPM_CHIRP_RADAR_SYSTEM_2_prj");
}
break;

case "4_3_2":
{
p.StandardInput.WriteLine(@"cd SPM_three_channel_monopulse_prj");
}
break;

case "4_4":
{
p.StandardInput.WriteLine(@"cd SSM_Multipath1_prj");
}
break;

}


p.StandardInput.WriteLine(@"SetEver");




while (true)
{
Application.DoEvents();

Thread.Sleep(100);
//此函数列举所有进程,并检验进程1是否存在,存在返回true,否则返回false
bool b = CheckProcess1();


if (b == false)
{

p.StandardInput.WriteLine(@"Converse");

while (true)
{
Application.DoEvents();

//检查进程2是否存在
bool b2 = CheckProcess2();

if (b2 == false)
{


backgroundWorker1.CancelAsync();
ShowDrawForm();
break;

}
else
{

Thread.Sleep(1);
}
}
break;
}
else
{

Thread.Sleep(1);
}
}


}
...全文
141 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanhuiqiao 2010-06-08
  • 打赏
  • 举报
回复
说sleep(1)没用?我觉得不太准确,sleep(1)的用途是挂起本线程,让位于其他线程,为了并发。精度10ms?依据?我印象中比这长,可能因Framwork的版本不同有差异,2.0中比这个要高,大概30吧
xie19sc 2010-06-08
  • 打赏
  • 举报
回复
系统给出你的报错问题是什么?
捷哥1999 2010-06-08
  • 打赏
  • 举报
回复
在此对话框From_Load事件中会去读取文件2,但是现在执行这段代码会卡死,请大家参谋下

没有看到你这个代码,贴出来看?
-小蕾- 2010-06-08
  • 打赏
  • 举报
回复
帖子好长呀,有点晕呼呼, 慢慢看。。。
卡卡Gemini 2010-06-08
  • 打赏
  • 举报
回复
了解,我回去改下,还有其他的问题么?[Quote=引用 1 楼 zzmissll 的回复:]
Sleep(1)对pc实际没用。pc的时钟精度是10ms
[/Quote]
zzmissll 2010-06-08
  • 打赏
  • 举报
回复
另外,编辑一下格式。这样看的很累。
zzmissll 2010-06-08
  • 打赏
  • 举报
回复
Sleep(1)对pc实际没用。pc的时钟精度是10ms

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧