C# 如何停止.dll卸载上的线程
我有一个场景,.dll启动一个工作线程来监视.dll的某些活动。这是一种类似垃圾收集的东西,在一段时间不活动后清理内部缓存中的元素 现在的问题是:我有代码在特殊函数关闭时停止这个线程,但是。。这并不总是被调用。它从我编写的1-2应用程序中调用,但使用的是单元测试第三方工具,例如。g、 ,我无法调用此方法,因为我运行了任意测试子集 此外,我还尝试将此类代码挂接到AppDomain DomainUnload事件上,该事件也不会被调用C# 如何停止.dll卸载上的线程,c#,multithreading,dll,C#,Multithreading,Dll,我有一个场景,.dll启动一个工作线程来监视.dll的某些活动。这是一种类似垃圾收集的东西,在一段时间不活动后清理内部缓存中的元素 现在的问题是:我有代码在特殊函数关闭时停止这个线程,但是。。这并不总是被调用。它从我编写的1-2应用程序中调用,但使用的是单元测试第三方工具,例如。g、 ,我无法调用此方法,因为我运行了任意测试子集 此外,我还尝试将此类代码挂接到AppDomain DomainUnload事件上,该事件也不会被调用 AppDomain.CurrentDomain.DomainUnl
AppDomain.CurrentDomain.DomainUnload += new EventHandler(
(o, e) => Shutdown() );
如何处理?需要任何其他的“设计/方法”来完成此任务吗?如何将线程标记为
IsBackground=true
?应该从其他AppDomain中订阅DomainUnload
事件,而不是从正在卸载的域。如果我问什么Shutdown()
正在这样做线程。Finalize()
不会吗?看起来你正在让这种方式对自己造成比你需要的更大的困难。似乎你的问题是测试代码,而不是什么时候从你的应用程序中调用代码?您可能需要添加条件代码或使用模拟框架来自动化测试。如果您使用GC.KeepAlive()在.DLL中创建一个单例以使其保持活动状态,则该单例应一直保持活动状态,直到.DLL卸载,并且在此之前应调用其析构函数。这只是猜测,但也许值得一试?