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

如何在IE关闭时干净地释放.NET ActiveX控件使用的资源,.net,internet-explorer,activex,.net,Internet Explorer,Activex,我正在使用.NET ActiveX控件与USB设备进行接口。控件的供应商说,当我们使用完该设备时,我们必须调用控件的Shutdown()方法。这对me来说是个问题,因为很难确定用户何时使用该控件,因为它是在页面之间使用的,我只能告诉用户何时卸载页面,而不能告诉用户何时离开应用程序 浏览器是否会在关闭时通知所有ActiveX控件,并且该控件所使用的所有资源是否都能得到处理?简短的回答是“不,您无法知道浏览器何时离开。” 答案如下: 在IE6和IE7中,您可以在每个选项卡中设置BHO,并通过在构建每

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

浏览器是否会在关闭时通知所有ActiveX控件,并且该控件所使用的所有资源是否都能得到处理?

简短的回答是“不,您无法知道浏览器何时离开。”

答案如下:

  • 在IE6和IE7中,您可以在每个选项卡中设置BHO,并通过在构建每个BHO时自动递增计数,以及在收到DWebBrowserEvents2::OnQuit消息时自动递减计数,来维护打开选项卡的全局进程范围计数。然后,当计数达到1时,您会收到一条OnQuit消息,您知道您是最后一个选项卡,并且该过程正在结束
  • 在IE8中,你运气不好,因为它可以实现进程分离,即使这样,你也可以尝试装配一些东西,但是当所有选项卡都关闭时,选项卡宿主进程不会消失。它们会停留一段时间,以防新标签打开
  • 但这一切都无关紧要,因为您只想在控件被破坏时进行清理,也就是页面导航时。我不确定你所说的“[控件]在页面之间使用”是什么意思,因为这确实不受支持

    了解您的控件正在消失的正确方法是实现IOleObject,IE将在您离开时调用。当您获得空站点时,您需要进行清理

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

    答案如下:

  • 在IE6和IE7中,您可以在每个选项卡中设置BHO,并通过在构建每个BHO时自动递增计数,以及在收到DWebBrowserEvents2::OnQuit消息时自动递减计数,来维护打开选项卡的全局进程范围计数。然后,当计数达到1时,您会收到一条OnQuit消息,您知道您是最后一个选项卡,并且该过程正在结束
  • 在IE8中,你运气不好,因为它可以实现进程分离,即使这样,你也可以尝试装配一些东西,但是当所有选项卡都关闭时,选项卡宿主进程不会消失。它们会停留一段时间,以防新标签打开
  • 但这一切都无关紧要,因为您只想在控件被破坏时进行清理,也就是页面导航时。我不确定你所说的“[控件]在页面之间使用”是什么意思,因为这确实不受支持


    了解您的控件正在消失的正确方法是实现IOleObject,IE将在您离开时调用。当您获得空站点时,您需要进行清理

    该控件具有状态,并且在多个页面上使用,因此我无法在onunload事件中调用Shutdown(),因为下一个页面可能也在使用该控件。因此,一个页面创建一个ActiveX控件,然后它就一直存在?那似乎不太好。它的站点将变得无效,等等。每次我们导航到另一个页面时,控件都会被实例化,它与有状态的扫描仪进行对话。我希望.Net控件在浏览器关闭时关闭扫描仪,而不是在页面之间导航时关闭扫描仪。该控件具有状态并且在多个页面上使用,因此我无法在onunload事件中调用shutdown(),因为下一个页面可能也在使用该控件。因此,一个页面创建ActiveX控件,然后它就永远留在这里?那似乎不太好。它的站点将变得无效,等等。每次我们导航到另一个页面时,控件都会被实例化,它与有状态的扫描仪进行对话。我希望.Net控件在浏览器关闭时关闭扫描仪,而不是在页面之间导航时关闭扫描仪。