【发布时间】:2016-09-28 16:24:55
【问题描述】:
我有一个 C# GUI 应用程序,它通过官方官员互操作 COM 库自动执行一些 Excel 任务。我正在为SheetActivate 事件提供我自己的事件处理程序。
// fetch the excel handle
var excel = viewer.GetApplication() as Microsoft.Office.Interop.Excel.Application;
// set sheet activate event handler
excel.SheetActivate += excel_SheetActivate;
我相信互操作库从它创建的线程调用此事件处理程序。我的问题是我需要根据这个事件更新一些 GUI 组件,但是我无法跨这些线程对 GUI 执行更新操作。
我的问题是,从我相信在它自己的线程中的这个 excel 互操作事件处理程序中,我怎样才能以线程安全的方式安全地更新我的 GUI?
我之所以问这个问题是因为我目前在更新 GUI 时收到有关跨线程操作的运行时错误。
编辑:我相信链接和建议的可能答案适用于 WPF。我的应用程序不是 WPF,它是较旧的 WinForms。我没有看到 Application.Current 属性。
【问题讨论】:
-
感谢您的链接。这似乎确实为我指明了正确的方向,但这些答案似乎是针对 WPF 的。我正在使用较旧的 WinForms。我没有看到
Application.Current属性。 -
@Ryan 只需使用引发错误的控件中的
someControl.Invoke(,它将在该控件的正确线程上调用代码。 -
好吧,明白了。谢谢!
-
将我的评论转为完整答案。
标签: c# excel multithreading office-interop