0

有什么方法可以将事件添加到线程结束时执行的当前线程。

我有一个解决方案,我们创建了我们想要重用的资源,但仍然需要在线程结束时处理以防止泄漏,我不能相信每个人都会勤奋地向他们的代码添加手动处理调用。

我可以在线程周围使用包装器来做到这一点,但这不是一个可靠的解决方案,因为我无法 100% 确定每个人都会使用包装器,有时可能需要将其添加到现有线程中。

所以我需要我的资源能够添加一个 dispose 事件,以便在胎面完成时调用。

这在 C# 中可能吗

4

3 回答 3

0

有什么方法可以在线程结束时将事件添加到当前执行的线程中?

不,框架中没有您可以订阅的事件。

正如您所说,一种解决方案是用一个try / finally块包装线程主方法。


另一种解决方案是依赖 GC。如果有人忘记调用Dispose,析构函数仍会在对象超出范围后被调用——不过,它将在终结器线程上调用。

于 2013-01-10T09:34:53.367 回答
0

如果您预计开发人员可能会忘记调用Dispose()对象,则可以使用另一种模式来强制他们调用此类方法。这受到数据库事务如何工作的启发。

这个想法是您使用公开两种方法的对象。Complete()RollBack()。在对象生命周期结束时,开发人员需要调用Complete()工作。如果他不遵守,对象的析构函数(或Dispose())将调用RollBack(). 在 .NETTransactionScope中的类就是一个很好的例子。

在您的情况下,您需要将线程对象封装在此类中。调用者不直接处理线程对象,而是处理这个类对象。

于 2013-01-10T09:41:36.507 回答
0

我们都在这里谈论同一个.net吗?只是暗示Finalize

http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx

这是在清除资源时告诉“GC”执行一些附加操作的方法。

于 2013-01-10T10:00:33.133 回答