c# winforms metoda działająca w tle

0

Witam, potrzebuje zrobić metodę, która będzie działała w tle i będzie sprawdzała czy proces aplikacji został zamknięty (mój kod podam poniżej). Próbowałem skorzystać z czegoś takiego jak background worker ale nie wiem czy jest to dobry pomysł. Co polecacie?

private void check_if_process_was_killed()
        {
            Process[] proc = Process.GetProcessesByName("python");
            if (proc.Length == 0)
            {
                labelBotRunning.Visible = false;

                buttonStartBot.Enabled = true;
                buttonStopBot.Enabled = false;
            }
            else
            {
                labelBotRunning.Visible = true;

                buttonStartBot.Enabled = false;
                buttonStopBot.Enabled = true;
            }
        }
1

Żeby sprawdzać czy proces został zamknięty potrzebujesz mieć osobny proces

0

Odpowiadaj w postach.
Ale zaraz - Ty już odpalasz zewnętrzny proces więc nie potrzebujesz osobnego dodatkowego procesu. Możesz sprawdzać tutaj, w tym wypadku może to być nawet timer

1

ale tego pythona, to sam odpalasz (w podtekście: są bardziej deterministyczne metody "trzymania go za ryj") , czy oczekujesz ze "się jakoś odpalił" ?

Zwróć uwagę, ze użyta przez ciebie funkcja zwraca tablicę Procesów, to powinno ci dać do myślenia: to nie jest deterministyczny kod, będzie w najlepszym przypadku działał przypadkowo

0
  Process p = new Process();
  p.StartInfo = new ProcessStartInfo();
  p.StartInfo.FileName = "python.exe";
  p.StartInfo.Arguments = "Scripts/load.pyw";
  p.StartInfo.UseShellExecute = false;
  p.Exited += new EventHandler(myProcess_Exited);
  p.EnableRaisingEvents = true;
  p.Start();

Sam się już w tym troche pogubiłem i stwierdzam teraz, że troszke tego nie przemyślałem. U góry jest kod w którym tworze ten proces i dodałem po prostu eventhandler, który będzie przechwytywał gdy proces zostanie zamknięty. Problem był taki że z początku chciałem sprawdzać wszystkie procesy pythona, bo nie wiedziałem ile ich w przyszłości stworze i np. też jakichś odpalonych z poziomu tego skryptu. A na to, że mógłbym napotkać jakiś inny proces nie mojej aplikacji chciałem zaradzić, że wszystkie je zamkne na starcie programu... xd Dzięki panowie. A te timery to muszę poczytać o tym i być może skorzystam gdzieś z tego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1