Я делаю следующие предположения:
- Этот код является методом в форме (System.Windows.Forms.Form).
- Переменная 'listBox1' является элементом управления ListBox на форме.
- Вы получаете исключение ObjectDisposedException при закрытии формы.
- Вы запускаете этот метод в отдельном потоке (не показан в коде, но подразумевается в вопросе).
Я бы предположил, что ваш код блокируется при вызове receiveFrom () в сокете, когда форма закрыта. Следующее сообщение, которое поступает из сети, заставляет returnFrom возвращаться, после чего вы помещаете полученное сообщение в список, который больше не существует. При первом обращении к этому списку появляется строка кода «this.listBox1.Text» при создании StringBuilder, которая является строкой, вызывающей исключение ObjectDisposeException. ListBox - это объект, который может быть удален, хотя в данный момент это может быть и форма, в зависимости от скорости поступления сообщений.
Кажется, что многое нужно сделать, но я не уверен, что такое правильный совет. Я сначала проверил бы мои предположения 1-4 выше, а затем изучил бы рефакторинг вашего приложения так, чтобы оно НЕ использовало несколько потоков. Я делаю это предложение, потому что должен предположить, что это не единственная проблема с потоками, которая может возникнуть в вашем приложении. Я, безусловно, могу ошибаться в этом предположении, и в этом случае вы можете проигнорировать ответ.
Если я ограничу часть «что нужно сделать» вашего вопроса более ограниченной областью, то я бы посоветовал правильно отключить ваш приемник UDP, прежде чем разрешить закрытие окна, снова при условии, что мои предположения верны.