如何正确清除内存中的Web浏览器

时间:2014-05-18 23:11:32

标签: c# .net winforms memory

在我的C# WinForms应用程序中,我有一个TabControl嵌套了WebBrowser控件。

当页面加载时(一个silverlight控制页面)我在我的页面中得到了音频和视频。

但是当我打电话时

tabControl1.TabPages.Remove(myTabPage);

我仍然听到音频播放。如何从内存中清除当前的webBrowser?

1 个答案:

答案 0 :(得分:1)

您已从标签控件中删除了标签页。你有破坏标签页,也没有销毁它包含的控件。

事实上,在显示代码之后,您可以立即执行

tabControl2.TabPages.Add(myTabPage);

将相同的标签页添加到不同的标签控件。 Web浏览器通常会执行类似的操作,以启用可以将选项卡拖放到另一个窗口的功能。这也是暂时使标签页不可见的方式,因为TabControl没有Visible属性。

您需要做的是为标签页控件myTabPage调用Dispose方法。通常,框架会在其父选项卡控件被销毁后自动处理,但由于您手动从其父容器中删除控件,因此不会发生这种情况。你必须手动处理它。将代码修改为如下所示:

tabControl1.TabPages.Remove(myTabPage);
myTabPage.Dispose();

这应该处理标签页及其子控件的资源,包括WebBrowser。

但这并不一定会阻止声音,至少不会立即停止。为确保发生这种情况,您需要将WebBrowser控件的Source property设置为null。您必须在处置标签页之前执行此操作(您无法修改已处置对象的属性)。