Чистая остановка потока работающего цикла c # в ожидании событий Windows - PullRequest
0 голосов
/ 22 октября 2018

У меня есть этот существующий код, который не очищает поток должным образом.Прежде всего, чтобы запустить поток, который ожидает входящие сигналы и обработать их:

public void StartTheWholeThing(){
    manualResetEvent = new ManualResetEvent();
    thread = new Thread(StartRunning);
    thread.start();
    manualResetEvent.Set();
}

public void StartRunning()
    {
        //Listen for foreground changes 
        hhook = SetWinEventHook(EventSystemForeground, EventSystemForeground, IntPtr.Zero,
                ProcessDelegate, 0, 0, WineventOutofcontext);

        // Thread state
        manualResetEvent.WaitOne();

        //  mesage loop that SetWinEventHook requires
        Application.Run();
    }

private void ProcessDelegate(){
    //Do something
}

Теперь мы хотим правильно закрыть поток.

public void StopRunning(){
    manualResetEvent.Reset();
    thread.Abort();  // IS THIS THE CORRECT MANNER?
}

Thread.Abort () кажетсягрубый способ закрыть нить.Есть ли более чистый способ запуска / остановки потоков в сочетании с SetWinEventHook?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...