我的理解是,使用.NETs threadpool运行的任何东西都是这样的:
ThreadPool.QueueUserWorkItem(myproc);
当应用程序关闭时,将被CLR彻底终止。
在这种情况下,假设myproc函数包含一个无限循环。有没有办法可以挂钩线程的终止?
答案 0 :(得分:1)
没有。当CLR正在拆除您的进程时,它会主动中止任何剩余的后台线程。我说积极中止,因为与Thread.Abort()
的正常调用不同,代码中不会引发任何异常,因此您无法对其进行响应。
此时,如果您还有其他事情要做,CLR并不特别在意;你的过程已经死了,kaput,即将被埋葬,你无能为力阻止它。如果某些东西足够重要,它必须在进程终止之前必须被清理,它应该进入前台线程,这样进程将保持足够长的时间,以便它可以做任何需要做的事情。