C# Excel的多线程访问

C# Excel的多线程访问,c#,multithreading,excel,C#,Multithreading,Excel,我有两个方法,method1和method2,都有lock(App),其中App是同一类中的静态实例 应用程序是共享项目帮助程序中的静态实例 method1、method2被许多线程调用。 我只想一次运行method1或method2 问题是它们似乎不是 在method1和method2中,我将一些数据绘制到Excel,得到异常 名称:COMException 消息:来自HRESULT的异常:0x800AC472 我搜索了一下,发现异常是由Excel应用程序未准备好引起的。 没有UI手势,因此我

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

应用程序是共享项目帮助程序中的静态实例

method1、method2被许多线程调用。 我只想一次运行method1或method2 问题是它们似乎不是 在method1和method2中,我将一些数据绘制到Excel,得到异常

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

我搜索了一下,发现异常是由Excel应用程序未准备好引起的。
没有UI手势,因此我断定异常是由两种方法同时写入Excel引起的。

请检查您是否正在调用异步方法写入Excel。
如果是这样,这就是问题所在,即使您使用了锁,实际调用也会在同一时间运行。
尝试等待excell方法结束。

Ofir

请检查您是否正在调用excell的异步方法。
如果是这样,这就是问题所在,即使您使用了锁,实际调用也会在同一时间运行。
尝试等待excell方法结束。

Ofir

您当前是否遇到同时运行
method1()
method2()
的问题?很抱歉,我无法找出问题所在。到目前为止,你编码了什么?你有什么错误吗?你那里的东西应该有用。您遇到了什么问题?使用
lock(App)
会产生编译错误,因为
App
是一个类型,而不是
类型
对象。为了将来的参考,您应该发布当您提出这样的问题时出现的编译错误。@JonSenchyna:您假设App是一种类型,但OP在OP中指定该类中的“App是静态实例”。您当前是否遇到
method1()
method2()
正在同时运行?很抱歉,我无法找出问题所在。到目前为止,你编码了什么?你有什么错误吗?你那里的东西应该有用。您遇到了什么问题?使用
lock(App)
会产生编译错误,因为
App
是一个类型,而不是
类型
对象。为了将来的参考,您应该发布当您提出这样的问题时出现的编译错误。@JonSenchyna:您假设App是一种类型,但OP在OP中指定该类中的“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;
        }
    }