IE关闭时如何干净地释放.NET ActiveX Control使用的资源

时间:2009-07-07 17:14:44

标签: .net internet-explorer activex

我正在使用.NET ActiveX控件来连接USB设备。控件的供应商说我们在使用设备时必须调用控件的Shutdown()方法。这对我来说是个问题,因为要确定用户何时使用控件并不容易,因为它是在页面之间使用的,我只能告诉页面何时被卸载,而不是当用户离开应用程序时。

浏览器在关闭时是否通知所有ActiveX控件,并且不能控制控件使用的所有资源?

1 个答案:

答案 0 :(得分:1)

简短的回答是“不,你无法知道浏览器什么时候消失。”

答案如下:

  1. 在IE6和IE7中,您可以在每个选项卡中包含BHO,并通过在每个BHO构造时以原子方式递增计数来维护全局的进程范围的打开选项卡计数,并在获得DWebBrowserEvents2时原子地递减计数:: OnQuit消息。然后,当计数到达一个,并且您收到OnQuit消息时,您知道您是最后一个选项卡,并且该过程将消失。
  2. 在IE8中,你运气不好,因为它会处理进程分离的事情,即便如此,你也可以尝试进行操作,但是当关闭所有选项卡时,选项卡主机进程不会消失。如果新标签打开,它们会暂停一段时间。
  3. 但这一切都不重要,因为你只想在你的控件被销毁时进行清理,这就是页面导航的时候。我不确定你的意思是“[控件]在页面之间使用”,因为那确实不受支持。

    了解控制权的正确方法是实现IOleObject,IE将在你离开的时候调用IOleObject::SetClientSite(NULL)。当您获得NULL站点时,您将进行清理。