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