Re: Необрабатываемое исключение в WinForms
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.10.21 21:56
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Вот думаю, если добавить в Main обработчики смогу ли я словить это исключение(в .net этот косяк исправлен видимо не будет)


Сможешь. Причем тебе нужно в нем снять стектрейсы для всех потоков. Проблема из-за того, что хэш-табличка меняется в другом потоке, в то время как упавший выполняет
s_contextHash.Values.CopyTo(ctxs, 0);


По фиксили они не везде, кстати. Вот доступ без лочки:
            internal static ThreadContext FromId(uint id)
            {
                ThreadContext context = (ThreadContext)s_contextHash[id];
                if (context is null && id == Kernel32.GetCurrentThreadId())
                {
                    context = new ThreadContext();
                }

                return context;
            }


А вам точно нужен честный выход из приложения? У вас там какие-то данные сохраняются? Если нет, можешь просто кильнуть процесс вызвав:
Environment.Exit(0);


А так вам нужно перед тем как инициировать выход завершить все рабочие потоки и сделать так, чтобы новые не создавались, а потом уже звать:
AppProgram.Stop()
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.