У меня есть этот существующий код, который не очищает поток должным образом.Прежде всего, чтобы запустить поток, который ожидает входящие сигналы и обработать их:
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?