Уничтожить Window после завершения потока

188
30 марта 2017, 18:03

Есть метод Something я его запускаю 100500 раз, однако объект System.Windows.Window не исчезает из памяти.

private void Something()
{
  Thread t = new Thread(()=> {
    Window w = new Window() { Width = 1024, Height = 768 };
    w.Show();
    Thread.Sleep(1000);
    w.Close();
  });
  t.SetApartmentState(ApartmentState.STA);
  t.Priority = ThreadPriority.Normal;
  t.Start();
  GC.Collect();
}
Answer 1

Открывать окно в собственном потоке - не очень хорошая идея, обычно в поток выделяют только вычисления. Однако, в данном примере память будет освобождаться, если подписаться на событие Closed окна и вызвать Dispatcher.CurrentDispatcher.BeginInvokeShutdown, а после закрытия окна вызвать Dispatcher.Run. В реальном использовании Dispatcher.Run вызывается после открытия окна, а закрытие происходит по действию пользователя, а не программно.

private void Something()
{
    var t = new Thread(() =>
    {
        var w = new Window() { Width = 1024, Height = 768 };
        w.Show();
        w.Closed += (s, ex) => 
            Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background);
        Thread.Sleep(1000);
        w.Close();
        Dispatcher.Run();
    });
    t.SetApartmentState(ApartmentState.STA);
    t.Priority = ThreadPriority.Normal;
    t.Start();
    GC.Collect();
}

Информация отсюда.

READ ALSO
Заменить “-” на пробел

Заменить “-” на пробел

Чтобы перевести строку в hex код, нужно применить этот код:

188
C# Сервер нарушил протокол. Section=ResponseStatusLine

C# Сервер нарушил протокол. Section=ResponseStatusLine

Возникает ошибка: Сервер нарушил протоколSection=ResponseStatusLine Ссылку на ресурс дать не смогу

437
Отображение загрузки файла WebMethod

Отображение загрузки файла WebMethod

Есть WebMethod который принимает html и помещает в pdf файл(в темп юзера)Файл формируется, сохраняется, но это происходит незаметно для пользователя(не...

256
Различие анонимных методов и lambda

Различие анонимных методов и lambda

В чем различие между анонимными методами и lambda-выражениями? В анонимных методах мы можем обойтись без параметров, если даже это и ожидается:

210