我有一个异步WPF窗口,该窗口在Excel中的单独线程中运行。我正在尝试使用嵌入在ExcelDna.Utilities库中的API调用(那些熟悉ExcelDna的人知道我在说什么)来访问散布在各种Excel工作簿/电子表格上的大量数据。
我尝试进行的任何调用都会引发错误,因为它在另一个线程中运行,并且不访问Excel运行线程以获取其Application对象,所以我认为这是错误的。
[当我尝试通过宏(功能区按钮调用的c#方法)执行相同操作时,它没有问题。这是确保其有线程问题的第一个线索。
我确实是多线程领域的新手,但据我所知,我应该从Dispatcher对象中调用它。问题是,即使经过数小时的搜索,我也找不到解决方法。
我的假设正确吗,或者我只是忽略了另一件事?如果是这样,如何从Dispatcher访问“ ExcelDna.Utilities.XLApp”?
ExcelDna.Utilities.Workbook[] workbooks = ExcelDna.Utilities.XLApp.Workbooks;
顺便说一下,Office.Interop在窗口线程中工作,但对我来说不是一个选择。
您可以使用Excel-DNA帮助程序ExcelAsyncUtil.QueueAsMacro
,在可以安全调用C API的宏上下文中安排代码在主线程上运行。