【问题标题】:C# Windows forms - launching process in a loopC# Windows 窗体 - 循环启动进程
【发布时间】:2020-07-01 23:42:26
【问题描述】:

我从循环内部启动一个 .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 \r\n");

            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++;        
   }

【问题讨论】:

  • 不要使用Thread.Sleep,你在UI线程上(我相信)。使您的功能async 并使用await Task.Delay()

标签: c# windows forms


【解决方案1】:
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 处于活动状态

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多