ActiveX 控件 Dispose(true) 没有被调用

3

我的C# ActiveX控件被托管在IE 8中。当控件卸载时,我想执行代码。

我尝试了以下方法:

...
public class ActiveXControl : Control 
{
    protected override void Dispose(bool disposing) 
    {
        if (disposing) 
        {
            // Cleanup
        }
    }
}
...

但是disposing始终为false(从终结器调用)。由于我需要访问托管对象,因此无法使用它。

当浏览器“卸载”控件时,如何调用清理代码?

我发现了IOleObject :: Close方法,它由Control类实现,但据我所知,没有办法覆盖其行为。


一般来说,在.NET中编写IE浏览器扩展(BHO,工具栏或ActiveX控件)并不是一个好主意。 - EricLaw
@Eric:它只在一个众所周知的环境中使用。在我的特殊情况下,我想不到任何缺点。也许有一篇文章介绍它? - Michael Stoll
我发现当你从页面导航离开时,VisibleChanged事件会触发。 你有找到其他解决方案吗? - mbeckish
2个回答

1
我没有这样做过,但是有个建议可以尝试:可能可以在网页的HTML中嵌入一些JavaScript,当页面导航离开时调用您的ActiveX控件上的方法。您可以从这种方法中调用您的清理代码。

这肯定可以运行。但我更喜欢一个非 JavaScript 的解决方案。 - Michael Stoll

1
你可以重写 OnHandleDestroyed() 方法,该方法在 IE 销毁控件窗口时被调用。

尝试过了,但从未被调用。 - Michael Stoll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接