【发布时间】:2013-04-24 01:08:37
【问题描述】:
我有两个方法,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 引起的。
【问题讨论】:
-
您目前是否正在同时运行
method1()和method2()? -
很抱歉,我无法弄清楚问题所在。到目前为止你编码了什么?你有什么错误吗?
-
你所拥有的应该可以工作。你遇到了什么问题?
-
使用
lock(App)会产生编译错误,因为App是一种类型,而不是Type对象。为了将来参考,您应该发布在提出此类问题时遇到的编译错误。 -
@JonSenchyna:您假设 App 是一种类型,但 OP 在 OP 中指定“App 是该类中的静态实例”。
标签: c# multithreading excel