采用的是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);
}
}
}
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);
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货