Эквивалентно IsDisposed с использованием C# wpf

Я работаю над настраиваемой программой передачи ключей для видео-роликов и использую MouseKeyHook и использую приведенный здесь пример кода: https://github.com/gmamaladze/globalmousekeyhook/blob/vNext/Demo/Main.cs чтобы получить основные строительные работы.

Поскольку пример был предназначен для выигрышных форм, у меня возникли проблемы с одной линией в частности. Я заставил все работать, опуская - if (IsDisposed) return; строка 176

Как мне скопировать этот код для wpf?

 private void Log(string text)
    {
       if (IsDisposed) return;
        textBoxLog.AppendText(text);
        textBoxLog.ScrollToLine(textBoxLog.LineCount - 1);
    }

РЕДАКТИРОВАТЬ: Это не было связано с сборкой мусора, это потому, что если форма удаляется, textBoxLog вызовет исключение ObjectDisposedException.

1 ответ

Решение

Это не для сбора мусора, это потому, что если форма удаляется textBoxLog бросит ObjectDisposedException если вы попытаетесь позвонить AppendText или же ScrollToLine после того, как форма была удалена и Log вызвали после факта.

WPF-окна и элементы управления не являются одноразовыми, как winforms, однако, если вы хотите воссоздать поведение, просто переопределите OnClosed метод и установить флаг.

private bool _isClosed = false;   

protected override void OnClosed(EventArgs e)
{
    _isClosed = true;
    base.OnClosed(e);     
}

private void Log(string text)
{
   if (_isClosed) return;
    textBoxLog.AppendText(text);
    textBoxLog.ScrollToLine(textBoxLog.LineCount - 1);
}
Другие вопросы по тегам