我正在爲excel開發一個VSTO加載項。我使用後臺工作線程在後臺執行一段代碼,以便用戶可以自由地在Excel表格上工作。在excel中運行c#addin後臺線程後沒有觸發Sheet事件(單元格更改,選擇更改)
我註冊了小區變更和使用主代碼sheet_activate事件處理程序選擇改變事件監聽器的代碼所示:`
private void thisWorkbook_SheetActivate(Object sheet1)
{
try
{
if (sheet1 is Worksheet)
{
Worksheet sheet = sheet1 as Worksheet;
sheet.SelectionChange += eventDel_SelectionChange;
sheet.Change += eventDel_CellsChange;
}
}
catch (Exception e)
{
printException(e);
}
}`
運行後臺工作線程之前,這些事件越來越引起作爲預期。但是,運行後臺工作線程後,不知何故這些事件不會被觸發。
我必須執行thisWorkbook_SheetActivate再次解決此問題。每次運行後臺工作線程後,我都必須這樣做。我的後臺工作人員中的代碼段分析工作表中已存在的數據,進行一些更改,然後更新工作表中的數據。
我知道excel使用COM(組件對象模型)和STA(單線程公寓)來執行線程,即一次只能在公寓內執行一個線程。我不確定這是否會導致問題。
有人可以解釋爲什麼會發生這種情況?解決此問題的可能解決方案是什麼?
我目前正在使用Microsoft Visual Studio 2010和Microsoft Excel 2007.
在此先感謝!
嗨Dgorti,Thanx爲輸入。其實我已經實現了IMessage接口來處理拋出的異常。你能幫我解釋如何從工作後臺線程調用主線程的任何鏈接。現在,我通過GUI中的按鈕調用上面的sheetactivate函數。有沒有辦法從後臺線程調用這個函數,並調用主線程? –
另外,我無法在任何地方找到任何合理的解釋,爲什麼會發生這個問題。你能幫我理解這個問題的原因嗎? –