C# Windows 窗体 - 循环启动进程



我从循环内部启动一个.exe文件,.exe文件将在完成其工作时自行终止,所以我对此进行了检查(P_Exited(。

  1. 问题是如何在循环内启动.exe文件并保持 UI 活动/活动,以便我可以看到一些反馈 - 比如它通过了多少次等(我认为一些线程会有所帮助(

  2. 问题是我有时需要提前退出进程(在它自行终止之前(,例如我需要在运行 3 小时后退出进程,我该如何实现?

谢谢你帮助我

public void start_opt()
{

int pocetEas = eas_list.CheckedItems.Count;
log.Clear();
string[] EA_pole = nazevEA.ToArray();
string[] INI_pole = nazevINI.ToArray();

for (int i = 0; i < pocetEas; i++)
{
DateTime localDate = DateTime.Now;
log.AppendText(localDate + " - Optimalizace " + (i + 1) + " z " + pocetEas.ToString() + " spuštěna rn");
try
{
Process P = new Process();
P.Exited += new EventHandler(P_Exited);
P.StartInfo.FileName = @Properties.Settings.Default.mt5_terminal;
P.StartInfo.Arguments = "/config:" + Properties.Settings.Default.mt5_appdata + "\MQL5\files\" + INI_pole[i];
P.EnableRaisingEvents = true;
P.Start();
}
catch
{
}
if (hotovychEA < i + 1)
{
timer1.Start();
while (hotovychEA < i + 1)
{
Thread.Sleep(1000);
}
}
}
}
private void P_Exited(object sender, EventArgs e){
hotovychEA++;        
}
private async Task RunProcAsync(Process proc)
{
await Task.Factory.StartNew(() =>
{
proc.Start();
var exited = proc.WaitForExit(10000); // Set required Timeout here
if (!exited) { proc.Kill(); }
});
}

将给定的方法添加到代码中,并将p.Start()替换为await RunProcAsync(p);。如果进程在特定时间段内运行,这应该会终止您的进程,并使 UI 保持活动状态

最新更新