如何从Excel互操作事件线程更新GUI控件?

我有一个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; 

我相信互操作库从它创build的线程调用这个事件处理程序。 我的问题是,我需要更新基于这个事件的一些GUI组件,但是我不能在这些线程上的GUI上执行更新操作。

我的问题是,从这个优秀的互操作事件处理程序,我相信是在自己的线程,我怎样才能安全地更新我的graphics用户界面以线程安全的方式?

我问这是因为我目前正在接收更新GUI时有关跨线程操作的运行时错误。

编辑:我相信链接和build议可能的答案是WPF。 我的应用程序不是WPF,它是较早的WinForms。 我没有看到一个Application.Current属性。

只是使用

 private void excel_SheetActivate(object activatedSheet) { if (someControl.InvokeRequired) { someControl.Invoke((WorkbookEvents_SheetActivateEventHandler)excel_SheetActivate, activatedSheet); } else { someControl.Text = //... } } 

其中someControlsomeControl错误的控件,它将检查是否需要调用,如果是,则会在该控件的正确线程上使用相同的参数重新调用相同的函数。