我有一个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
属性
就用
private void excel_SheetActivate(object activatedSheet)
{
if (someControl.InvokeRequired)
{
someControl.Invoke((WorkbookEvents_SheetActivateEventHandler)excel_SheetActivate, activatedSheet);
}
else
{
someControl.Text = //...
}
}
其中someControl
是抛出错误的控件,这将检查调用是否必要,如果是,它将在该控件的正确线程上使用相同的参数重新调用相同的函数。