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