Wykrywanie czy program się wyłączył

0

Aktualnie używam Waitforexit(int32.MaxValue) ale chodzi mi o coś takiego żeby skrypt wykrył kiedy plik .exe np CoDMP.exe zakończy działać.
Nie chce używać Waitforexit(); ponieważ to zatrzymuje wszystkie inne process'y.

Wiecie może jak to zrobić tak aby ten kod nie pożerał dużej ilości RAM i żeby działał tak jak trzeba.

Np. Kod wykrywa że proces się skończył i np. wyłącza mi timer1 i pare innych linijek skryptu.

Zgóry dzięki.

0

Nie możesz porównać po prostu listy aktualnych procesów ?

0

mogę ale do tego muszę mieć timera włączone a to by zabierało bardzo dużo pamięci RAM... bo ja chce żeby zaraz po wyłączeniu program zareagował a nie pare sekund później...

do tego sposobu sam doszedłem ale użyję go tylko jak nie będzie niczego lepszego ;]

1
  1. Jeśli nawet będziesz sprawdzał w Timerze co sekundę, to uwierz, nie będzie to zbyt męczące dla procesora - bardzej męcząca będzie pewnie obsługa twojego procesu jako takiego (trzeba mu 'przekazywać' procesor co jakiś czas). To jeden.
    Dwa - WaitForExit zatrzymuje tylko proces w którym został wykonany. Nie ma czegoś co by zatrzymało wszystkie procesy na komputerze ;)
0

Wiem ale zatrzymuje mi Timer który jest mi potrzebny do robienia screenów... Timer jest w tej samej formie

1

To nie do końca rozumiem co chcesz zrobić... Skoro masz timera to czemu go nie użyjesz do sprawdzania czy proces jeszcze jest?

OK, skoro tak bardzo chcesz, to możesz spróbować wywołaniem asynchronicznym delegacji (coś jak wątek) - tworzysz sobie delegata który będzie czekał na zakończenie programu, a kiedy program się zakończy zmieni zwrotnie jakąś wartość (np. IsFinished na true) czy wywoła metodę. Rozumiesz o co mi chodzi? ;)

0

tak ale jak to zrobić??? z tego co rozumiem w tym delegacie process będzie czekał na zakończenie a reszta kodu poza delegatem będzie chodzić normalnie tak??

1

Nie próbowałem tego rozwiązania, ale zawsze możesz przetestować. Pisane na szybko w tej chwili, nie przejmuj się nazwami i estetyką bo się niezbyt postarałem ;):

        static void Main(string[] args)
        {
            Application.Run(new Form1());
        }

        public Form1()
        {
            InitializeComponent();

            Wywołaj();
            ABC();
        }

        delegate void DelegatCzekający();

        private void ABC()
        {
            while (true)
            {
                if (skończone) break;
                else continue;
            }
        }

        private void Wywołaj()
        {
            DelegatCzekający delegat = Czekanie;
            delegat.BeginInvoke(this, Callback, null);
        }

        private void Czekanie()
        {
            // tutaj waitforexit czy coś
        }

        private void Callback(IAsyncResult res)
        {
            skończone = true;
        }

        public bool skończone;
0

Wielkie Dzięki MSM. Z dnia na dzień uczę się nowych rzeczy lol. Przetestuję kod i dam znać jak działa. Jeszcze raz wielkie dzięki.

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