假设您有一个类,其中启动了一些后台线程:该类可能具有一个
假设当用户在UI上点击“运行”按钮时,会调用
假设在执行
Run()
方法,该方法启动这些线程,并且具有一个Stop()
方法,以正常停止它们。其中一些后台线程可能是手动创建的,其他一些可能由Timer
进行管理,当上述Run()
方法被调用时激活。public void Run()
{
m_ShutdownRequested = false; // shutdown flag disabled
m_WorkerThread = new Thread(Work) { IsBackground = true };
m_WorkerThread.Start();
// ...
}
public void Stop()
{
lock (m_LockInput)
{
m_ShutdownRequested = true; // shutdown flag enabled
Monitor.Pulse(m_LockInput);
}
m_WorkerThread.Join(m_ShutdownTimeout);
}
假设当用户在UI上点击“运行”按钮时,会调用
Run()
方法。同样地,当用户在UI上点击“停止”按钮时,会调用Stop()
方法。为了通过UI调用这些方法,应该如何实现?它们都应该是异步的吗?如果是,如何处理某些线程无法停止的可能性?假设在执行
Stop()
方法后,某些线程没有停止。此时,如果用户再次点击“运行”按钮,则该类的实例将具有尚未停止的一些线程。然而,在启动Run()
方法时,先前的m_WorkerThread
实例将被覆盖:如果在线程尚未完成时执行此覆盖,会发生什么?