如何防止 VS2013 使用 Dragon Naturally Speaking 捕获 COM 异常 运行
How can I prevent VS2013 catching COM Exceptions with Dragon Naturally Speaking running
我有 RSI,当它突然发作时,我使用 Dragon Naturally Speaking 12 Home
来节省我大量的输入。一般来说,我发现它非常准确,当我打字不多时,我的 RSI 会消退。
不过,我现在在 Windows 10
上使用它,在 Visual Studio 2013
上开发 WinForms 应用程序。当 运行 连接调试器时,我收到很多 COM 异常。
这些发生在不同的地方,主要是在显示 ToolStripMenu
时(当 运行 根本没有任何东西可以访问任何 COM 组件时),我终于追踪到了 Dragon。
如果Dragon是运行,即使关闭麦克风,也会出现异常,但如果我关闭Dragon,则不会。
我去年在 Windows 7
上使用了相同的软件组合,遇到了 none 个这样的问题。
重启没有区别;在启动 Dragon 之前或之后也不会启动 Visual Studio。
我想避免迁移到更高版本的 Visual Studio 或 Dragon 的费用,除非我知道问题已在更高版本中解决。
如何防止VS2013捕获这些异常?
编辑以提供堆栈跟踪:
System.Runtime.InteropServices.COMException crossed a native/managed boundary
ErrorCode=-2147352573
Message=Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))
Source=Accessibility
StackTrace:
at Accessibility.IAccessible.get_accKeyboardShortcut(Object varChild)
at System.Windows.Forms.AccessibleObject.get_accKeyboardShortcutInternal(Object childID)
InnerException:
在显示 ToolStripMenu 时捕获 COM 异常的所有情况下,堆栈跟踪都是相同的。
**为简洁起见并删除了不相关的细节进行了编辑。
我猜想 VS 2015 不会有太大帮助,因为它更有可能是新 OS 和 Dragon 之间的交互差异。
您能否启用调试 -> Windows -> 模块并检查是否有与 Dragon 相关的东西挂接到您正在调试的进程中?我猜 Dragon 挂钩并且它的调用没有被错误检查,所以它们冒泡到你的调试会话。
Dragon有排除进程的功能吗?如果是这样,您可以排除您的目标,看看它是否有帮助。
好的,所以按照 Mark 的建议,我发现通过关闭调试选项 break when exceptions cross appdomain or managed/native boundaries
,异常被吞没了,但是当菜单出现时有明显的恼人延迟。
然后,正如他在我接受的答案中所建议的那样,我更仔细地查看了 Dragon 选项。由于我已经确定罪魁祸首是 ToolStripMenus,因此关闭菜单和按钮的语音命令的选项显然是一个值得尝试的候选者:
取消我在屏幕截图中指出的选项使整个问题消失。
我有 RSI,当它突然发作时,我使用 Dragon Naturally Speaking 12 Home
来节省我大量的输入。一般来说,我发现它非常准确,当我打字不多时,我的 RSI 会消退。
不过,我现在在 Windows 10
上使用它,在 Visual Studio 2013
上开发 WinForms 应用程序。当 运行 连接调试器时,我收到很多 COM 异常。
这些发生在不同的地方,主要是在显示 ToolStripMenu
时(当 运行 根本没有任何东西可以访问任何 COM 组件时),我终于追踪到了 Dragon。
如果Dragon是运行,即使关闭麦克风,也会出现异常,但如果我关闭Dragon,则不会。
我去年在 Windows 7
上使用了相同的软件组合,遇到了 none 个这样的问题。
重启没有区别;在启动 Dragon 之前或之后也不会启动 Visual Studio。
我想避免迁移到更高版本的 Visual Studio 或 Dragon 的费用,除非我知道问题已在更高版本中解决。
如何防止VS2013捕获这些异常?
编辑以提供堆栈跟踪:
System.Runtime.InteropServices.COMException crossed a native/managed boundary
ErrorCode=-2147352573
Message=Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))
Source=Accessibility
StackTrace:
at Accessibility.IAccessible.get_accKeyboardShortcut(Object varChild)
at System.Windows.Forms.AccessibleObject.get_accKeyboardShortcutInternal(Object childID)
InnerException:
在显示 ToolStripMenu 时捕获 COM 异常的所有情况下,堆栈跟踪都是相同的。
**为简洁起见并删除了不相关的细节进行了编辑。
我猜想 VS 2015 不会有太大帮助,因为它更有可能是新 OS 和 Dragon 之间的交互差异。
您能否启用调试 -> Windows -> 模块并检查是否有与 Dragon 相关的东西挂接到您正在调试的进程中?我猜 Dragon 挂钩并且它的调用没有被错误检查,所以它们冒泡到你的调试会话。
Dragon有排除进程的功能吗?如果是这样,您可以排除您的目标,看看它是否有帮助。
好的,所以按照 Mark 的建议,我发现通过关闭调试选项 break when exceptions cross appdomain or managed/native boundaries
,异常被吞没了,但是当菜单出现时有明显的恼人延迟。
然后,正如他在我接受的答案中所建议的那样,我更仔细地查看了 Dragon 选项。由于我已经确定罪魁祸首是 ToolStripMenus,因此关闭菜单和按钮的语音命令的选项显然是一个值得尝试的候选者:
取消我在屏幕截图中指出的选项使整个问题消失。