我想在我的WPF应用程序中禁用跨线程异常.在Windows窗体应用程序中,我会这样做:
Control.CheckForIllegalCrossThreadCalls = False
如何在WPF应用程序中执行相同操作?
在WPF中,通过CheckAccess()成员检查非法跨线程调用的责任在于Dispatcher对象.像DependencyObject这样的对象使用它们关联的Dispatcher来检查几乎所有API调用上的非法线程访问.
与WinForms不同,无法在WPF中禁用此检查.默认情况下处于启用状态,无法禁用.
至于为什么会出现这种情况(这里有一点推测).CheckForIllegalCrossThreadCalls成员已添加到.net 2.0中.原因是从不同的线程访问控件已经是非法的,没有执行此操作.这导致了许多不可预测的用户场景,而不是主动崩溃,控件将具有不可预测的behvaior.
在2.0中,WinForms团队添加了CheckForIllegalCrossThreadCalls作为主动防止这些场景发生的方式.但是因为有些人正在逃避它,他们必须插入一种方法来关闭它,以便应用程序向后兼容.
如果您需要将其关闭,则代码中存在错误.通过查找和修复错误而不是禁用检查,您可以获得更好的服务.