1

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

App是共享项目Helper中的静态实例

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 问题是它们似乎没有。
在方法 1 和方法 2 中,我将一些数据绘制到 Excel 中,我得到了异常

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

我用谷歌搜索,发现异常是由于 Excel 应用程序未准备好引起的。没有 UI 手势,所以我认为异常是由两种方法同时尝试写入 Excel 引起的。

4

1 回答 1

1

请检查您是否正在调用异步方法来 Excel。
如果是这样,这就是问题所在,即使您使用了锁,实际调用也是同时运行的。
尝试等到 Excel 方法结束。
奥菲尔

于 2013-04-23T16:56:51.500 回答