Исключение ObjectDisposedException после удаления элемента управления

#dispose #objectdisposedexception

#удаление #исключение objectdisposedexception

Вопрос:

У меня есть реальная потребность в том, что я собираюсь спросить, но, чтобы упростить задачу, я свел проблему к этому.

  • Создайте проект приложения C # Windows forms
  • Добавьте текстовое поле и кнопку в форму.
  • Добавьте событие Leave в текстовое поле.
  • Добавьте событие щелчка к кнопке.

С помощью этого кода

     private void textBox1_Leave(object sender, EventArgs e) {
        button1.Dispose();
    }

    private void button1_Click(object sender, EventArgs e) {
        MessageBox.Show("in button 1");
    }
  

Запустите проект и поместите курсор в текстовое поле.
Теперь выйдите, нажав на кнопку.

Оставляя текстовое поле, вы вызываете удаление кнопки, но событие щелчка для кнопки находится за событием Leave текстового поля, ожидающим обработки. Но текстового поля больше нет, поэтому вы получаете ObjectDisposedException .

Итак, …. вопрос в том, как мне устранить событие в очереди, чтобы я мог безопасно избавиться от кнопки.

Комментарии:

1. button1.Click -= button1_Click? Вероятно, вам также следует удалить кнопку из ее родительского элемента, прежде чем удалять ее.

2. Почему вы звоните button1.Dispose() ? Это необычная вещь, которую можно найти в приложении Winforms. И я предполагаю, что вы имеете в виду «больше нет кнопки «, а не «больше нет текстового поля», верно?