有什么方法可以将事件添加到线程结束时执行的当前线程。
我有一个解决方案,我们创建了我们想要重用的资源,但仍然需要在线程结束时处理以防止泄漏,我不能相信每个人都会勤奋地向他们的代码添加手动处理调用。
我可以在线程周围使用包装器来做到这一点,但这不是一个可靠的解决方案,因为我无法 100% 确定每个人都会使用包装器,有时可能需要将其添加到现有线程中。
所以我需要我的资源能够添加一个 dispose 事件,以便在胎面完成时调用。
这在 C# 中可能吗
有什么方法可以将事件添加到线程结束时执行的当前线程。
我有一个解决方案,我们创建了我们想要重用的资源,但仍然需要在线程结束时处理以防止泄漏,我不能相信每个人都会勤奋地向他们的代码添加手动处理调用。
我可以在线程周围使用包装器来做到这一点,但这不是一个可靠的解决方案,因为我无法 100% 确定每个人都会使用包装器,有时可能需要将其添加到现有线程中。
所以我需要我的资源能够添加一个 dispose 事件,以便在胎面完成时调用。
这在 C# 中可能吗
有什么方法可以在线程结束时将事件添加到当前执行的线程中?
不,框架中没有您可以订阅的事件。
正如您所说,一种解决方案是用一个try / finally
块包装线程主方法。
另一种解决方案是依赖 GC。如果有人忘记调用Dispose
,析构函数仍会在对象超出范围后被调用——不过,它将在终结器线程上调用。
如果您预计开发人员可能会忘记调用Dispose()
对象,则可以使用另一种模式来强制他们调用此类方法。这受到数据库事务如何工作的启发。
这个想法是您使用公开两种方法的对象。Complete()
和RollBack()
。在对象生命周期结束时,开发人员需要调用Complete()
工作。如果他不遵守,对象的析构函数(或Dispose()
)将调用RollBack()
. 在 .NETTransactionScope
中的类就是一个很好的例子。
在您的情况下,您需要将线程对象封装在此类中。调用者不直接处理线程对象,而是处理这个类对象。
我们都在这里谈论同一个.net吗?只是暗示Finalize
http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx
这是在清除资源时告诉“GC”执行一些附加操作的方法。