我检查了调用我的Dispose(bool)方法的哪个线程。当应用程序运行时,它始终是调用Dispose的UI线程,比如单击[x]以关闭表单。但是当我关闭整个应用程序时,许多Dispose方法会在(单个)不同的线程上调用。当我转储堆栈跟踪时,我发现它们都被调用了 System.ComponentModel.Component.Finalize()。
这是否意味着我的所有Dispose方法都需要成为线程安全的?或者WinForms是否保证UI线程不会再触及这些对象,它是否也在UI线程与现在最终确定的线程之间建立了某种“之前发生过的”关系?
答案 0 :(得分:2)
是的,终结器可以在一个单独的线程上运行。通常这没有问题,因为当一个Object完成后,任何用户线程(如UI线程)都无法访问它。因此,您通常不必在终结器中保持线程安全。