关于udione的解决web浏览器内存泄漏

此代码是由udione在回应关于在.NET中的WebBrowser控件内存泄漏常年问题给出。

//dispose to clear most of the references this.webbrowser.Dispose(); BindingOperations.ClearAllBindings(this.webbrowser); //using reflection to remove one reference that was not removed with the dispose var field = typeof(System.Windows.Window).GetField("_swh", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var valueSwh = field.GetValue(mainwindow); var valueSourceWindow = valueSwh.GetType().GetField("_sourceWindow", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(valueSwh); var valuekeyboardInput = valueSourceWindow.GetType().GetField("_keyboardInputSinkChildren", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(valueSourceWindow); System.Collections.IList ilist = valuekeyboardInput as System.Collections.IList; lock(ilist) { for (int i = ilist.Count-1; i >= 0; i--) { var entry = ilist[i]; var sinkObject = entry.GetType().GetField("_sink", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); if (object.ReferenceEquals(sinkObject.GetValue(entry), this.webbrowser.webBrowser)) { ilist.Remove(entry); } } }

1)这第三行,

BindingOperations.ClearAllBindings(this.webbrowser);

将不会编译我。 是什么类型this.webbrowser ? 我曾以为这是WebBrowser ,但该方法需要System.Windows.DependencyObject

2)在线路

var valueSwh = field.GetValue(mainwindow);

什么是mainwindow ? 形式持有浏览器控件?

3)在从底部第六行,

if (object.ReferenceEquals(sinkObject.GetValue(entry), this.webbrowser.webBrowser))

是什么的类型this.webbrowser.webBrowser ? 我没有看到所谓的领域webBrowserWebBrowser类型。 这只是一个错字?

感谢您的帮助。

--------------解决方案-------------

  1. BindingOperations是WPF -如果你正在使用的WinForms,你不会需要这一行。
  2. 要获得mainwindow ,你只需要调用WPF方法GetWindow

var mainwindow = GetWindow(this);

3. this.webbrowser是WPF控件(控制ID FrameworkElement.Name )。 默认情况下,这通常是webbrowser1

分类:。净 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.906 (s). 10 q(s)