Vb.net 如何在打勾事件期间检测Word中是否打开了对话框?

Vb.net 如何在打勾事件期间检测Word中是否打开了对话框?,vb.net,ms-word,vsto,Vb.net,Ms Word,Vsto,为了执行一个任务,我使用一个计时器事件根据光标所在位置的段落样式更新功能区 但是,如果用户打开一个对话框(例如,在编号段落内定义新的数字格式) 当此对话框处于活动状态时,{“无法创建选择对象。”},在尝试获取选择时,计时器事件内发生异常: If Globals.ThisDocument.Application.Selection.Type <> WdSelectionType.wdSelectionInlineShape Then 如果是Globals.ThisDocument

为了执行一个任务,我使用一个计时器事件根据光标所在位置的段落样式更新功能区

但是,如果用户打开一个对话框(例如,在编号段落内定义新的数字格式

当此对话框处于活动状态时,
{“无法创建选择对象。”}
,在尝试获取选择时,计时器事件内发生异常:

If Globals.ThisDocument.Application.Selection.Type <> WdSelectionType.wdSelectionInlineShape Then 
如果是Globals.ThisDocument.Application.Selection.Type WdSelectionType.wdSelectionInlineShape,则
任何对
应用程序的访问。选择
都会导致异常(甚至检查它是否为
)。所以,我想知道如何检测对话框是否打开



编辑一个解决方法是在尝试获取
全局文件.ThisDocument.Application.Selection时捕获
系统.Runtime.InteropServices.COMException
。但是,如果出现对话框,最好不要访问该对话框,并完全避免异常

看起来您正试图从辅助线程访问Word对象模型。但您不应该这样做,因为Office应用程序使用单线程单元模型,不支持多线程。您必须在主线程(UI线程)上使用Word对象。使用在主线程(非辅助线程)上触发勾号事件的计时器类。有关更多信息,请参阅

是什么让你认为这是一个线程问题?另外,当我点击链接时,我打开了(这是一个重定向)。我尝试使用
System.Timers.Timer
而不是
System.Windows.Forms.Timer
,但问题是相同的。我认为这与线程无关。问题是,当对话框在前面时,没有
应用程序选择
(这个错误对我来说很有意义)。我正在试图了解如何检测对话框是否打开,或者如何检测应用程序。选择是否无效。你有没有找到答案?@SameerSingh没有。如果我记得很清楚,我使用了轮询循环而不是勾号事件。它的CPU使用率很低,但不如事件那么有效。它还影响到​光标闪烁行为。。。。