ObjectDisposedException について

初級者向けにおさらいします。

目次

この例外エラーの説明

Object Disposed(破棄された後の変数(オブジェクト)を操作しようとすることで発生する)Exception です。

事例とその対処方法

例外エラーは、想定外の扱われ方をすると発生して飛んで来ます。それは命令の使い方が間違っていたり、存在しないデータを扱おうとしていたり、アカウント権限を越えたアクセスをしようとしていたり(Windows 側やウェブ側の話だったり)、サービスが動いていないのに連携しようとしたり、製品上の仕様考慮モレだったり、そういう系です。

こうなっている前提のはずだから、こうやろうとしたのに、実際はここがこうなっているからダメじゃん!こういう場合の処理が無いじゃん!みたいなコードになっていませんか?

Form

オブジェクトを破棄するということは、もうその変数は使わないということです。その後で使おうとするのはダメです。

Dim frm As New Form
frm.Dispose()
frm.Show()
System.ObjectDisposedException: '破棄されたオブジェクトにアクセスできません。
オブジェクト名 'Form' です。'

再度使いたい場合は、破棄チェックをしてから使用するようにします。またはインスタンス生成し直します。

If frm IsNot Nothing AndAlso Not frm.IsDisposed Then
    frm.Show()
End If