У меня есть 2 формы, одна MainForm
, а вторая DebugForm
. В MainForm есть кнопка, которая настраивает и отображает DebugForm следующим образом, и передает ссылку на уже открытый SerialPort:
private DebugForm DebugForm; //Field
private void menuToolsDebugger_Click(object sender, EventArgs e)
{
if (DebugForm != null)
{
DebugForm.BringToFront();
return;
}
DebugForm = new DebugForm(Connection);
DebugForm.Closed += delegate
{
WindowState = FormWindowState.Normal;
DebugForm = null;
};
DebugForm.Show();
}
В DebugForm я добавляю метод для обработки события DataReceived
соединения через последовательный порт (в конструкторе DebugForm):
public DebugForm(SerialPort connection)
{
InitializeComponent();
Connection = connection;
Connection.DataReceived += Connection_DataReceived;
}
Затем в методе Connection_DataReceived
я обновляю TextBox в DebugForm, используя Invoke для обновления:
private void Connection_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
_buffer = Connection.ReadExisting();
Invoke(new EventHandler(AddReceivedPacketToTextBox));
}
Но у меня есть проблема. Как только я закрываю DebugForm, он выдает ObjectDisposedException
в строке Invoke(new EventHandler(AddReceivedPacketToTextBox));
.
Как я могу это исправить? Любые советы/помощь приветствуются!
ОБНОВЛЕНИЕ
Я узнал, что если я удаляю событие при нажатии кнопки и закрываю форму при нажатии этой кнопки, все в порядке, и моя отладочная форма закрывается без каких-либо исключений... как странно!
private void button1_Click(object sender, EventArgs e)
{
Connection.DataReceived -= Connection_DebugDataReceived;
this.Close();
}
Dispose()
, но у меня была такая же проблема. Я даже пытался поставитьif(Dispoing == false)
передInvoke
тоже не помогло. - person Saeid Yazdani   schedule 18.10.2012