Когда Система ASP.NET. Сеть. HttpResponse. Конец () называют, текущий поток прерывается?

Проблема в том, что вы вызываете GetGridData из фонового потока. Этот метод обращается к нескольким элементам управления WPF, которые привязаны к основному потоку. Любая попытка доступа к ним из фонового потока приведет к этой ошибке.

Чтобы вернуться к правильной теме, вы должны использовать SynchronizationContext.Current.Post. Однако в этом конкретном случае, похоже, большая часть работы, которую вы выполняете, основана на пользовательском интерфейсе. Следовательно, вы создадите фоновый поток, чтобы сразу вернуться к потоку пользовательского интерфейса и выполнить некоторую работу. Вам нужно немного реорганизовать свой код, чтобы он мог выполнять дорогостоящую работу в фоновом потоке, а затем публиковать новые данные в потоке пользовательского интерфейса после

18
задан Pure.Krome 13 December 2008 в 23:30
поделиться

3 ответа

Да, это действительно дизайном. Microsoft имеет даже , зарегистрировал это. Как еще Вы остановили бы остальную часть Вашей программы от выполнения?

6
ответ дан 30 November 2019 в 08:58
поделиться

Нет такой вещи как "корректное" аварийное прекращение работы. Вы могли просто Сбросить () ответ, тем не менее, вместо того, чтобы закончить его и позволить платформе заботиться о закрытии соединения для Вас. Я предполагаю в этом случае, что Вы хотите ответ, отправленный клиенту, т.е. типичному случаю.

Согласно MSDN, называя Ответ. Конец () бросает ThreadAbortException, когда ответ заканчивается преждевременно. Действительно необходимо только назвать Ответ. Конец (), когда Вы хотите повышенное исключение.

11
ответ дан 30 November 2019 в 08:58
поделиться

Нет ничего по сути неизящного об исключении, рекурсивно вызывающем Ваш стек для остановки текущего выполнения. Конечно, не больше, чем Вы выдающий исключение и ловящий его в некотором более низком месте в Вашем исключении.

я посмотрел бы на фильтрацию его от Вашего входа. Если Вы используете здоровье ASP.NET, контролирующее Вас, может настроить/отобразить каждое исключение данному поставщику (журнал событий, почта, и т.д.), чтобы управлять, получаете ли Вы уведомление для threadabort исключений или нет. Если бы это - пользовательский вход затем, я просто добавил бы, если проверить на него.

Примечание, что Вы не можете съесть ThreadAbortException поэтому, даже если Ваш код входа делает что-то как catch(Exception e) { // log exception and then do not throw again }, ThreadAbortException будет все еще повышен снова платформой, после того как Ваш блок выгоды выходит.

3
ответ дан 30 November 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: