AccessViolationException
特定IEnumerable<>
の類似オブジェクトが使用されたときに生成される LCG を使用した .Net 2.0 にバグがあることは承知しています。そして、修正プログラムがあること。
Windows 7 x64で実行されているWinFormsを使用して.Net 4.0にプロジェクトがあります。RichTextBox
私は非常に単純なフォームを持っています -クライアント全体のサイズを占めるフォームとドックだけです。
バックグラウンド スレッドから、次のような処理を行うフォームの更新メソッドを定期的に呼び出します。
public static void Log(string text)
{
Invoke((MethodInvoker)(() => {
lock(richTextBox) {
richTextBox.Text += text;
}
}));
}
実際にはinvoke
、try/catch の内側と外側の両方を持っています (はい、これは恐ろしいことだと思います!)。キャレットを最後に置いてスクロールするなど、いくつかの追加処理を行っています。私も使用してStringBuilder
いますが、これはすべて要点です:
まれに、しかし必然的に、デバッグ中に IDE がAccessViolationException
テキスト ボックスを更新しているコードのどこかを検出します。テキストを更新するビットである場合もあれば、選択を行うビットである場合もあり、キャレットまでスクロールするビットである場合もあります。F5 キーを押して続行すると、通常はしばらく問題が発生せず、アプリケーションは以前と同じように続行します。
このテキスト ボックスでは特別なことは何も起こりません。競合状態はありません (まず第一に、私はロックを持っているため) だけでなく、他の何かが試みているのと同時にテキスト ボックスに書き込もうとするコードがコードに何もないためです。
なぜこれが起こっているのでしょうか?申し訳ありませんが、そもそもなぜこれが起こっているのかさえわからないため、ここに他にどのような情報を記載できるかわかりません.