通过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完成。