Я боролся с этой проблемой с клиентом, и вот что я нашел.
Мы работаем над приложением WPF, которое выполняет многопоточную и фоновую обработку.Это исключение внезапно начало появляться, и я начал кое-что копать.Наконец, я нашел виновника примерно через час расследования:
var worker = new BackgroundWorker();
worker.DoWork += (o, ea) => Dispatcher.BeginInvoke(new Action(() =>
{
//do some heavy processing here, plus UI work, then call another method.
//inside that other method, I found this:
var thread = new Thread(() =>
{
//do some heavy processing.
}) { IsBackground = true };
thread.Start();
}));
Похоже, что происходило то, что фоновый работник заканчивает свою работу и возвращается из своей работы.Однако поток, созданный внутри этого фонового работника, не завершил обработку и возвращается только для того, чтобы обнаружить, что поток, в котором он был создан, уже вышел из области видимости, в результате чего возникла исключительная ситуация AccessViolationException.
Для того, чтобыОтладив это, я бы посоветовал обратить пристальное внимание на то, где происходит исключение, и внимательно изучить ваш стек вызовов, который может быть, а может и не быть уничтожен или потерян, в зависимости от того, находитесь ли вы в потоке, когда возникает исключение.