.NET 2.x Метод - Application.DoEvents(); - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Есть такой метод: Application.DoEvents(); - Обрабатывает все сообщения Windows, которые в данный момент находятся в очереди сообщений. Создаем консольное приложение
        static void Main(string[] args)
        {
            var th = new Thread(() =>
            {
                try
                {
                    WebBrowser WB = new WebBrowser();
                    WB.ScriptErrorsSuppressed = true;
                    WB.Navigate("https://www.google.ru/");
 
                    Stopwatch Таймер = new Stopwatch();
                    Таймер.Start();
 
                    Console.WriteLine("Перед циклом, программа занимает " + (Process.GetCurrentProcess().WorkingSet64 / 1024).ToString() + " KB");
 
                    while (true)
                    {
                        if (Таймер.ElapsedMilliseconds > 15 * 1000)
                            break;
 
                        Application.DoEvents();
                        Thread.Sleep(50);
                    }

                    WB.Dispose();
                    Таймер = null;
 
                    Console.WriteLine("После цикла и высвобождение памяти браузера, программа занимает " + (Process.GetCurrentProcess().WorkingSet64 / 1024).ToString() + " KB");
 
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
 
                    Console.WriteLine("После коллектора, программа занимает " + (Process.GetCurrentProcess().WorkingSet64 / 1024).ToString() + " KB");
                    Thread.Sleep(-1);
                }
                catch { }
                Environment.Exit(0);
            });
            th.SetApartmentState(ApartmentState.STA);
            th.Start();
 
            Thread.Sleep(-1);
        }
После остановки цикла и высвобождения памяти, память все ровно остается занятой непонятно чем. Опытным путем выяснил что во всем виноват Application.DoEvents(); Если из цикла не выходить, а бесконечно гонять метод, то приложение начинает бесконечно ждать память (по чуть-чуть) Может я не правильно пользуюсь сборщиком мусора? Загружать страницу другими методами - не вариант, мне нужна поддержка обработки JS, редиректы и прочее. Использовать бибилотеки со сторонними браузера тоже не выход

Решение задачи: «.NET 2.x Метод - Application.DoEvents();»

textual
Листинг программы
th.Abort();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы