0
我已經得到了通過官官互操作COM庫自動執行一些Excel的任務的C#GUI應用程序。我爲事件提供了自己的事件處理程序。如何從Excel互操作事件線程更新GUI控件?
// 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
屬性。
請參閱:http://stackoverflow.com/questions/9732709/the-calling-thread-cannot-access-this-object-because-a-different-thread-owns-it – PaulF
感謝您的鏈接。這似乎確實指向了正確的方向,但這些答案似乎適用於WPF。我正在使用較舊的WinForms。我沒有看到一個'Application.Current'屬性。 – Ryan
@Ryan只是使用'someControl.Invoke('從拋出錯誤的控制,將調用在該控件的正確線程上的代碼。 –