来自异步WPF窗口的ExcelDna C API调用与Excel不在同一线程中运行

问题描述 投票:0回答:1

我有一个异步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在窗口线程中工作,但对我来说不是一个选择。

c# wpf multithreading excel-dna c-api
1个回答
0
投票

您可以使用Excel-DNA帮助程序ExcelAsyncUtil.QueueAsMacro,在可以安全调用C API的宏上下文中安排代码在主线程上运行。

© www.soinside.com 2019 - 2024. All rights reserved.