【问题标题】:Multiple thread access to Excel多线程访问 Excel
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多