如何处理WebBrowser的Unloaded事件?关闭时事件未触发问题
解决WebBrowser Unloaded事件未触发的问题
问题原因
Unloaded事件仅在控件从可视化树中被移除时触发,若你的关闭场景(比如窗口关闭)未正确触发控件移除逻辑,或者事件处理代码存在逻辑错误,就会导致事件不执行。
修复方案
- 修正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; }
- 主动触发清理逻辑
不要仅依赖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(); }
- 修正Uri路径的转义问题
C#字符串中的反斜杠需要转义,使用@符号简化路径写法:
Uri myUri = new Uri(@"C:\Users\MyUser\Downloads\myPDFFile.pdf", UriKind.RelativeOrAbsolute);
内容的提问来源于stack exchange,提问作者Willy
相关产品推荐
相关产品推荐

