Saya meluncurkan file .exe dari dalam satu lingkaran, file .exe akan berhenti sendiri ketika menyelesaikan tugasnya, jadi saya harus memeriksanya (P_Exited).

  1. Pertanyaannya adalah bagaimana meluncurkan file .exe di dalam loop dan menjaga UI tetap hidup/aktif sehingga saya dapat melihat beberapa umpan balik - seperti berapa kali lulus dll. (Saya berasumsi beberapa threading akan membantu)

  2. Pertanyaannya adalah terkadang saya harus keluar dari proses lebih awal (sebelum berakhir sendiri) misalnya saya harus keluar dari proses setelah 3 jam berjalan, bagaimana saya bisa mencapainya?

Terima kasih telah membantu saya

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++;        
   }
1
Marek Tesař 2 Juli 2020, 02:42

1 menjawab

Jawaban Terbaik
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(); }
  });
}

Tambahkan metode yang diberikan ke kode Anda dan ganti p.Start() dengan await RunProcAsync(p);. Ini akan mematikan proses Anda jika berjalan selama periode waktu tertentu dan juga menjaga UI tetap aktif

2
Vishwa 2 Juli 2020, 01:53