2013-04-23 120 views
0

我有兩個方法,方法1,方法2,都有鎖(應用程序)其中應用程序是同一類中的靜態實例。多線程訪問Excel

應用程序是一個靜態實例在共享工程助手

void method1() 
{ 
    lock(Helper.App) 
    { 
     ExcelApp.FormulaCell.AddComments(errMsg); 
    } 
} 

    void method2() 
    { 
     lock(Helper.App) 
     { 
      //plot data (an 2-D array) to cells 
      var dataRng = ExcelApp.CurrentSheet.Cells(Formulacell.Row + 1, Formulacell.Column + 1); 
      dataRng = dataRng.get_Resize(n, m); 
      dataRng.Value2 = data; 
     } 
    } 

方法1,方法2是由多個線程調用。 我想一次只有method1或method2運行 問題是他們似乎沒有。
在方法1 &方法2,我繪製的一些數據到Excel中,我得到異常

名稱:收到COMException 消息:從HRESULT異常:0x800AC472

我用Google搜索,發現異常是由Excel導致應用程序未準備好。 沒有UI手勢,所以我得出結論,這個異常是由兩種方法試圖同時寫入Excel引起的。

+3

您目前是否遇到'method1()'和'method2()'在同一時間運行? – 2013-04-23 16:30:11

+1

對不起,我找不出問題所在。你到目前爲止編碼了什麼?你有什麼錯誤嗎? – 2013-04-23 16:30:15

+0

你有什麼應該工作。你有什麼問題? – 2013-04-23 16:30:19

回答

0

請檢查你是否調用異步方法excell。
如果是這樣,這是問題,即使您使用鎖定,實際的調用也會在同一時間運行。
嘗試等待excell方法結束。
Ofir