WPF эквивалентно «Control.CheckForIllegalCrossThreadCalls» в Windows Forms - PullRequest
2 голосов
/ 10 марта 2009

Я хочу отключить исключения многопоточности в моем приложении WPF. В приложении Windows Forms я бы сделал это:

Control.CheckForIllegalCrossThreadCalls = False

Как я могу сделать то же самое в приложении WPF?

1 Ответ

5 голосов
/ 10 марта 2009

В WPF ответственность за проверку на недопустимые вызовы между потоками возлагается на объект Dispatcher через член CheckAccess (). Такие объекты, как DependencyObject, используют связанный с ними Dispatcher для проверки доступа к нелегальным потокам практически во всех вызовах API.

В отличие от WinForms, в WPF нет возможности отключить эту проверку. Он включен по умолчанию и не может быть отключен.

Что касается того, почему это так (немного предположений здесь). Член CheckForIllegalCrossThreadCalls был добавлен в .net 2.0. Причина заключалась в том, что доступ к элементу управления из другого потока уже был незаконным, и не было никакого применения этого. Это привело к множеству непредсказуемых пользовательских сценариев, так как вместо упреждающего сбоя элемент управления мог бы иметь непредсказуемый behvaior.

В версии 2.0 команда WinForms добавила CheckForIllegalCrossThreadCalls для упреждающего предотвращения этих сценариев. Но поскольку некоторые люди сходили с рук , им пришлось вставить способ его отключения, чтобы приложения были обратно совместимы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...