EDIT 11-20-2009 : この質問はかなり前に投稿されましたが、今朝、問題が再び発生しました。ですから、他の誰かが何らかの洞察を提供してくれることを願っています(ただし、提供された回答はすでに役に立ちました)。
実稼働環境でブルームーンに入ると、コントロールのプロパティをNullReferenceException
参照することから取得します。以下にいくつかのサンプルコードを含めました。Items
ListBox
問題の の親フォームは、というListBox
プライベートを保持しています。このキューは、イベントに関する新しいメッセージを受け取ります。500 ミリ秒ごとにオフになるタイマーでは、次のメソッドが実行されます。Queue<string>
QueuedMessages
void DisplayQueuedMessages() {
lock (QueuedMessages) {
while (QueuedMessages.Count > 0) {
string msg = QueuedMessages.Dequeue();
this.lbxMessages.Items.Insert(0, msg); // NullReferenceException
if (this.lbxMessages.Items.Count > MAX_LBX_ITEMS) {
this.lbxMessages.Items.RemoveAt(Me.lbxMessages.Items.Length - 1);
}
}
}
}
繰り返しますが、私が述べたように、これはめったにスローしNullReferenceException
ません。アプリケーションを使用して数か月で、それは 3 ~ 4 回発生しました。
さらに、これが数回発生した場合、ListBox.Items
プロパティまたはListBox
それ自体のいずれかが不思議なことに消えてしまったようです。項目を追加する後続のすべてのメソッドはListBox
例外をスローします。回復する唯一の方法は、アプリケーションを閉じて元に戻すことです。
残念ながら、他に何百万ものやるべきことに常に気を取られていたので、挿入の前にログを追加することはできませんでした。現在、ログを追加しましたが、この問題が再び発生するまでには 1 か月以上かかる可能性があります。それまでの間、他にアイデアはありますか?これについて考えられる説明は何ですか?
私の本当の質問は次のとおりだと思います:他の誰かがこれが起こるのを見たことがありますか?存在しListBox
ていたにアクセスして突然 を取得しましたNullReferenceException
?そして、問題を解決する理由/方法を理解できましたか?