You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理WebBrowser的Unloaded事件?关闭时事件未触发问题

解决WebBrowser Unloaded事件未触发的问题

问题原因

Unloaded事件仅在控件从可视化树中被移除时触发,若你的关闭场景(比如窗口关闭)未正确触发控件移除逻辑,或者事件处理代码存在逻辑错误,就会导致事件不执行。

修复方案

  1. 修正Unloaded事件处理逻辑
    原代码中重新从frame.Content获取WebBrowser的操作多余且可能导致空引用,直接使用sender即可:
private void Browser_Unloaded(object sender, System.Windows.RoutedEventArgs e)
{
    var webBrowser = sender as System.Windows.Controls.WebBrowser;
    webBrowser?.Dispose();
    frame.Content = null;
}
  1. 主动触发清理逻辑
    不要仅依赖Unloaded事件,在明确的关闭场景(如窗口关闭、关闭按钮点击)中手动调用清理方法:
private void CleanupWebBrowser()
{
    var webBrowser = frame.Content as System.Windows.Controls.WebBrowser;
    if (webBrowser != null)
    {
        webBrowser.Unloaded -= Browser_Unloaded; // 移除事件订阅
        webBrowser.Dispose();
        frame.Content = null;
    }
}

比如在窗口的Closed事件中调用:

private void Window_Closed(object sender, EventArgs e)
{
    CleanupWebBrowser();
}
  1. 修正Uri路径的转义问题
    C#字符串中的反斜杠需要转义,使用@符号简化路径写法:
Uri myUri = new Uri(@"C:\Users\MyUser\Downloads\myPDFFile.pdf", UriKind.RelativeOrAbsolute);

内容的提问来源于stack exchange,提问作者Willy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:25:20