有没有办法让我挂钩托管线程的退出(即在线程退出之前在线程上运行一些代码?)
我开发了一种用于挂钩线程退出的机制,该机制适用于某些线程。第 1 步:开发一个“挂钩”STA COM 类,该类接受一个回调函数并在其析构函数中调用它。第 2 步:在我要挂钩的线程上创建此对象的 ThreadStatic 实例,并将对象传递给转换为非托管函数指针的托管委托。然后在线程退出时调用委托(因为 CLR 在所有 STA COM RCW 上调用 IUnknown::Release 作为线程退出的一部分)。
例如,这种机制适用于我使用 Thread 类在代码中创建的工作线程。
但是,它似乎不适用于应用程序的主线程(无论是控制台还是 Windows 应用程序)。'hook' COM 对象似乎在关闭过程中被删除得太晚,并且尝试调用委托失败。
(我想实现这个工具的原因是我可以在退出线程上运行一些本机 COM 代码,这些代码与在线程上创建的 STA COM 对象一起工作,在它“为时已晚”之前(即在线程退出之前,并且不再可能在该线程上使用 STA COM 对象。))