我正在开发一个基于 NET 3.5 的遗留应用程序。这是我无法改变的约束。我需要执行第二个线程来运行长时间运行的任务而不锁定 UI。当线程完成时,我需要以某种方式执行回调。
现在我尝试了这个伪代码:
Thread _thread = new Thread(myLongRunningTask) { IsBackground = True };
_tread.Start();
// wait until it's done
_thread.Join();
// execute finalizer
不锁定 UI 的第二个选项如下:
Thread _thread = new Thread(myLongRunningTask) { IsBackground = True };
_tread.Start();
// wait until it's done
while(_thread.IsAlive)
{
Application.DoEvents();
Thread.Sleep(100);
}
// execute finalizer
当然,第二种解决方案不好,因为它会使 UI 过度充电。_thread 完成时执行回调的正确方法是什么?另外,我怎么知道线程是否被取消或中止?
*注意:*我不能使用 BackgroundWorker,也不能使用 Async 库,我需要使用原生线程类。