webbrowser 响应关闭事件

复制代码
void registerEvents(System.Windows.Forms.WebBrowser web)
        {
            var rnd = new Random();
            var head = web.Document.GetElementsByTagName("head")[0];
            if (head == null)
                return;

            var script = web.Document.CreateElement("script");
            IHTMLScriptElement domScript = (IHTMLScriptElement)script.DomElement;
            domScript.text = @"function registerEvents() { 
                                    window.ID =  '" + web.Name + @"';
                                }";

            head.AppendChild(script);
            web.Document.InvokeScript("registerEvents");

            dynamic win = web.Document.Window.DomWindow as IHTMLWindow2;
            var id = win.ID as string;
            if (!dicTabs.ContainsKey(id))
            {
                if (web.Tag != null)
                    dicTabs.Add(id, web.Tag as TabPage);
            }
            else if (web.Tag != null)
            {
                dicTabs[id] = web.Tag as TabPage;
            }

            var ids = tabBrowsers.TabPages.Cast<TabPage>()
                .Where(page => page.Tag != null).ToList()
                .Select(page => (page.Tag as WebBrowser).Name).ToList();

            var keys = dicTabs.Keys.Where(item => !ids.Contains(item)).ToList();
            foreach (var key in keys)
                dicTabs.Remove(key);
        }

        void Window_Unload(object sender, HtmlElementEventArgs e)
        {
            var window = sender as HtmlWindow;
            if (window == null)
                return;

            dynamic win = window.DomWindow;
            if (win != null && win.ID != null)
            {
                var id = win.ID as string;
                var tabPage = tabBrowsers.TabPages.Cast<TabPage>()
                    .Where(page => page.Tag != null && (page.Tag as WebBrowser).Name == id).FirstOrDefault();
                
                if ((tabPage.Tag as WebBrowser).Document != null)
                    return;
                
                if (dicTabs.ContainsKey(id))
                {
                    this.tabBrowsers.TabPages.Remove(dicTabs[id]);
                }
            }
        }
复制代码

在Navigated事件中注册:

registerEvents(web);
web.Document.Window.Unload += new HtmlElementEventHandler(Window_Unload);

 

posted on   空明流光  阅读(826)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示