我想启动一个线程来监听事件并在后台处理它们。这是我到目前为止所做的:
private Thread mThread;
private bool mKeepHandlingIt;
private void Init()
{
mKeepHandlingIt = true;
mThread = new Thread(ProcessEvents);
mThread.SetApartmentState(ApartmentState.STA);
mThread.Start();
}
private void ProcessEvents()
{
StaticClass.CoolEvent += HandleIt;
StaticClass.StartDoingStuff();
while (mKeepHandlingIt)
{
Application.DoEvents();
}
StaticClass.StopDoingStuff();
StaticClass.CoolEvent -= HandleIt;
}
private void HandleIt(object sender, EventArgs e)
{
//Handles it
}
protected override void Dispose()
{
if (mThread != null)
{
mKeepHandlingIt = false;
mThread.Join();
}
}
有更好的方法吗?像更适合此目的的线程类?在这种情况下,BackgroundWorker 似乎不是一个更好的选择......
但是,如果这是一个好方法,那么我有一个我不太理解的问题。上述解决方案适用于监听事件并处理它们,但是当调用 Dispose 并将 mKeepHandlingIt 设置为 false 时,退出 while 循环(如果我在循环中放置断点,调试器不会中断)但之后没有代码循环被执行并且 mThread.Join 永远不会返回。基本上......我想知道的是:我如何停止线程,然后确保在清理之前不要继续?