在我的应用程序使用ParameterizedThreadStart
委托创建线程后,该线程执行一些初始化并运行完成。稍后,我可以观察到该线程不再处于活动状态,因为其IsAlive
属性为false且ThreadState
属性为ThreadState.Stopped
。
一旦线程达到此状态,它们将保留在我的应用程序中,仍然作为线程对象存在,直到我的应用程序关闭。一旦它们不再活动,我可以采取任何措施来处理它们吗?我想删除该对象并释放所有资源,以便任何给定时刻我拥有的唯一线程对象是活动线程。但是线程没有实现IDisposable,所以我不确定我该怎么做。
答案 0 :(得分:2)
您将保留代码中对该主题的引用。
如果您编写的代码将检查线程的状态,那么该代码本身将使线程对象保持活动状态,直到GC收集它为止。
完成一个线程后,或理想情况下,如果您不需要访问它,请确保将所有引用都置空。线程没有实现IDisposable,因为你已经明确表示这对线程没有意义。
线程在.Net中是原生的,因此您不必担心泄漏。如果您确定他们会停止,那么只要您确定它已经完成就将其从列表中删除。
答案 1 :(得分:1)
听起来你需要放弃对Thread
对象的引用,因此垃圾收集器可以丢弃它。只需将您的参考设置为null
,并让GC在准备好后完成其工作。
根据您的具体情况,您可能希望使用WeakReference
(或我的朋友Cyrus'WeakReference<T>
)。
答案 2 :(得分:1)
非托管线程是否仍然存在,线程是否实际从其ParameterizedThreadStart方法返回?同时尝试制作IsBackground = false