多线程访问Excel

时间:2013-04-23 16:27:47

标签: c# multithreading excel

我有两个方法,method1,method2,都有lock(App),其中App是同一个类中的静态实例。

应用是共享项目助手中的静态实例

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;
        }
    }

method1,method2由许多线程调用。 我想一次只运行method1或method2 问题是他们似乎没有。
在method1& method2,我将一些数据绘制到Excel中,我得到了Exception

  

名称:收到COMException   消息:来自HRESULT的异常:0x800AC472

我用Google搜索并发现异常是由Excel应用程序未准备好引起的。 没有UI手势,所以我得出结论异常是由两种方法同时尝试写入Excel引起的。

1 个答案:

答案 0 :(得分:1)

请检查您是否要调用异步方法来进行分析 如果是这样,这就是问题,即使您使用了锁,实际的呼叫也在同一时间运行 试着等到excell方法结束 奥菲尔