Я знаю, что есть ошибка с .Net 2.0 с LCG, которая генерирует AccessViolationException
, когда используются определенные IEnumerable<>
и другие подобные объекты; и что есть исправление.AccessViolationException при взаимодействии с RichTextBox
У меня есть проект в .Net 4.0 с использованием WinForms, работающего под Windows 7 x64. У меня очень простая форма - ничего, кроме формы, и RichTextBox
состыковался, чтобы охватить весь размер клиента.
Из фонового потока, я периодически вызывать метод обновления на моей форме, что делает что-то похожее на следующее:
public static void Log(string text)
{
Invoke((MethodInvoker)(() => {
lock(richTextBox) {
richTextBox.Text += text;
}
}));
}
Я на самом деле есть и внутренность invoke
и снаружи в try/catch (Да, я знаю, это ужасно!), и я делаю некоторые дополнительные вещи, такие как перенос каретки в конец и прокрутка к ней. Я также использую StringBuilder
но все это рядом с точкой:
Редко, но неизбежно, в то время отладки, мой IDE обнаруживает AccessViolationException
где-то в коде, который обновляя текстовое поле. Иногда в бит, который обновляет текст, иногда на бит, который делает выбор, и иногда на бит, который прокручивается до каретки. Если я нажму F5, чтобы продолжить, я обычно не вижу проблемы в течение некоторого времени, и приложение продолжается по-прежнему.
С этим текстовым полем ничего не происходит. Нет состояния гонки (прежде всего потому, что у меня есть блокировка), но также и потому, что в моем коде просто нет ничего, что пыталось бы написать и написать в текстовое поле одновременно с чем-то другим.
Любая идея, почему это может произойти? Извините, я не знаю, какую другую информацию я могу здесь поместить, поскольку я даже не знаю, почему это происходит в первую очередь.
Нет, это неправда. Прежде всего, я добавил блокировку в последнее время, и нарушение доступа происходило до и после добавления. Кроме того, нет «другого потока», поскольку я вызывал обновления в потоке графического интерфейса. Во всяком случае, блокировка никогда не вызовет описанную вами проблему. – Ozzah