我可以添加一个关闭事件到当前线程

本文关键字:事件 线程 前线 一个 添加 我可以 | 更新日期: 2023-09-27 17:51:08

是否有办法在当前线程中添加一个在线程结束时执行的事件?

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

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

因此,我需要我的资源能够添加一个处置事件,以便在踩踏完成时调用。

我可以添加一个关闭事件到当前线程

我们在这里谈论的是同一个。net吗?仅仅实现Finalize

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

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

这是告诉'GC'在清除资源时执行一些额外操作的方法。

如果您希望开发人员忘记在对象上调用Dispose(),那么可以使用另一种模式来强制他们调用此类方法。这是从数据库事务的工作方式中得到启发的。

的想法是你使用的对象公开两个方法。Complete()RollBack()。在对象生命周期结束时,开发人员需要调用Complete()才能正常工作。如果他没有遵守,对象的析构函数(或Dispose())将调用RollBack()。在。net中TransactionScope类就是一个很好的例子。

在你的例子中,你需要将你的线程对象封装在这个类中。调用者不直接处理线程对象,但它处理这个类对象。

是否有办法添加一个事件到当前线程,当线程结束时执行?

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

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


另一个解决方案是依赖GC。如果有人忘记调用Dispose,析构函数仍将在对象超出作用域后的一段时间被调用——尽管它将在终结器线程上被调用。