创建新窗口然后关闭它会导致内存泄漏

本文关键字:泄漏 内存 新窗口 窗口 然后 创建 | 更新日期: 2023-09-27 18:29:37

我通过下面的代码生成新的窗口,并在那里显示一个网页,然后关闭它。但过了一段时间,软件出现内存不足的异常。所以内存泄漏正在发生。原因可能是什么?如何解决?非常感谢。

这就是我如何启动新窗口。我正在做一个循环,所以有成千上万的新窗口正在启动。正如你所看到的,60秒后,新窗口自动关闭

NewWindowThread<TitleWindow, string>(c => new TitleWindow(c), "the url that is going to be displayed at new window");

private void NewWindowThread<T, P>(Func<P, T> constructor, P param) where T : Window
{
    Thread thread = new Thread(() =>
    {
         T w = constructor(param);
         w.Show();
         w.Closed += (sender, e) => w.Dispatcher.InvokeShutdown();
         System.Windows.Threading.Dispatcher.Run();
    });
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}
public class TitleWindow : Window
{
    WebBrowser webnew = new WebBrowser();
    public TitleWindow(string srUrl)
    {              
         DockPanel dk = new DockPanel();
         dk.Width = 900;
         dk.Height = 600;
         this.AddChild(dk);
         webnew.Navigated += new NavigatedEventHandler(wbMain_Navigated);
         System.Windows.Threading.DispatcherTimer dispatcherTimer3 = new System.Windows.Threading.DispatcherTimer();
         dispatcherTimer3.Tick += new EventHandler(dispatcherTimer_Tick3);
         dispatcherTimer3.Interval = new TimeSpan(0, 0, 0, 60, 0);
         dispatcherTimer3.Start();
         webnew.Height = 600;
         webnew.Width = 900;
         dk.Children.Add(webnew);
         webnew.Navigate(srUrl);
         this.WindowState = WindowState.Minimized;
    }
    void dispatcherTimer_Tick3(object sender, EventArgs e)
    {             
         this.Close();
    }
}

创建新窗口然后关闭它会导致内存泄漏

当窗口关闭时,我立即怀疑WebBrowser控件没有释放其资源,因为您没有调用它的Dispose()方法。WebBrowser控件是ActiveX MSHTML控件的一个精简包装器。

为此,在窗口ClosingClosed事件上添加回调。例如CCD_ 6。