私には2つのフォームがあります。1つはで、もう1つは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
メソッドで、DebugFormのTextBoxを更新します。これは、Invokeを使用して更新を実行します。
private void Connection_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
_buffer = Connection.ReadExisting();
Invoke(new EventHandler(AddReceivedPacketToTextBox));
}
しかし、私には問題があります。DebugFormを閉じるとすぐに、LineにがスローObjectDisposedException
されInvoke(new EventHandler(AddReceivedPacketToTextBox));
ます。
どうすればこれを修正できますか?ヒント/ヘルプは大歓迎です!
アップデート
ボタンのイベントクリックでイベントを削除し、そのボタンのクリックでフォームを閉じると、すべてが正常で、例外なくデバッグフォームが閉じられることがわかりました...なんて奇妙なことでしょう。
private void button1_Click(object sender, EventArgs e)
{
Connection.DataReceived -= Connection_DebugDataReceived;
this.Close();
}