エラー「セーフハンドルは閉じられました」 ― 2008年03月22日 17時48分35秒
先週本番環境にインストールしたアプリケーションでタイトルのようなエラーがでて解決方法がわからず困っていました。
このエラーはObjectDisposedExceptionというそうです。Closeメソッドが呼ばれて、すでに破棄されたオブジェクトに対してアクセスしようとするとこのエラーになるようです。MSDNには以下のようなサンプルコードが載っています。
using System;
using System.IO;
public class ObjectDisposedExceptionTest
{
public static void Main()
{
MemoryStream ms = new MemoryStream(16);
ms.Close();
try
{
ms.ReadByte();
}
catch (ObjectDisposedException e)
{
Console.WriteLine("Caught: {0}", e.Message);
}
}
}
さすがにこんな単純なミスをすることはないでしょう。ただ今回はマルチスレッドで複数のスレッドからアクセスするオブジェクトだったため、このエラーが発生するようになってしまったようです。マルチスレッドの同期処理はしっかりしないといけません。
