Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何停止.dll卸载上的线程_C#_Multithreading_Dll - Fatal编程技术网

C# 如何停止.dll卸载上的线程

C# 如何停止.dll卸载上的线程,c#,multithreading,dll,C#,Multithreading,Dll,我有一个场景,.dll启动一个工作线程来监视.dll的某些活动。这是一种类似垃圾收集的东西,在一段时间不活动后清理内部缓存中的元素 现在的问题是:我有代码在特殊函数关闭时停止这个线程,但是。。这并不总是被调用。它从我编写的1-2应用程序中调用,但使用的是单元测试第三方工具,例如。g、 ,我无法调用此方法,因为我运行了任意测试子集 此外,我还尝试将此类代码挂接到AppDomain DomainUnload事件上,该事件也不会被调用 AppDomain.CurrentDomain.DomainUnl

我有一个场景,.dll启动一个工作线程来监视.dll的某些活动。这是一种类似垃圾收集的东西,在一段时间不活动后清理内部缓存中的元素

现在的问题是:我有代码在特殊函数关闭时停止这个线程,但是。。这并不总是被调用。它从我编写的1-2应用程序中调用,但使用的是单元测试第三方工具,例如。g、 ,我无法调用此方法,因为我运行了任意测试子集

此外,我还尝试将此类代码挂接到AppDomain DomainUnload事件上,该事件也不会被调用

AppDomain.CurrentDomain.DomainUnload += new EventHandler(
    (o, e) => Shutdown() );

如何处理?需要任何其他的“设计/方法”来完成此任务吗?

如何将线程标记为
IsBackground=true
?应该从其他AppDomain中订阅
DomainUnload
事件,而不是从正在卸载的域。如果我问什么
Shutdown()
正在这样做
线程。Finalize()
不会吗?看起来你正在让这种方式对自己造成比你需要的更大的困难。似乎你的问题是测试代码,而不是什么时候从你的应用程序中调用代码?您可能需要添加条件代码或使用模拟框架来自动化测试。如果您使用GC.KeepAlive()在.DLL中创建一个单例以使其保持活动状态,则该单例应一直保持活动状态,直到.DLL卸载,并且在此之前应调用其析构函数。这只是猜测,但也许值得一试?