通过VSTO中断运行Excelmacros
我通过VSTO运行Excel作为计算引擎(无用户交互),并希望能够以编程方式取消长时间运行的macros。
我目前的做法是把阻塞调用运行macros(Application.Run(“MyMacro”))在一个单独的线程,然后尝试中断它从主线程。
似乎没有任何内置的方法调用,如Application.Interrupt(),所以我试图以编程方式触发按CTRL + Break或ESC时发生的键盘中断。
目前的代码如下所示:
Application.CalculationInterruptKey = XlCalculationInterruptKey.xlAnyKey; Application.EnableCancelKey = XlEnableCancelKey.xlInterrupt; Application.SendKeys("{ESC}", false); //have tried with true as second argument
在这种情况下,最后一行代码块在macros完成之前不会执行。
我也尝试获取Excel的进程钩子,将其设置为活动进程/窗口并调用SendKeys而没有成功。
由于这需要成为执行任何macros的通用解决scheme,我不能修改macros观内容或提供任何保证。
有任何想法吗?
谢谢,
PS我也尝试发送CTRL + BREAK键盘命令,如Application.SendKeys(“^ {BREAK}”,false); debugging器暂停在这行,直到macros完成执行,所以看起来应用程序对象被阻止处理任何更多的命令,直到macros完成。