1

method1、method2の2つのメソッドがあり、両方ともlock(App)を持ち、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;
        }
    }

method1、method2 は多くのスレッドから呼び出されます。一度に method1 または method2 のみを実行したい 問題は、そうではないようです。
method1 & method2 で、一部のデータを Excel にプロットすると、例外が発生します

名前: COMException メッセージ: HRESULT からの例外: 0x800AC472

Google で調べたところ、Excel アプリケーションの準備ができていないことが原因で例外が発生していることがわかりました。UI ジェスチャがないため、2 つのメソッドが同時に Excel に書き込もうとしたことが例外の原因であると結論付けました。

4

1 に答える 1

1

優れた非同期メソッドを呼び出しているかどうかを確認してください。
その場合、これが問題です。ロックを使用していても、実際の呼び出しは同時に実行されています。
エクセルメソッドが終了するまで待ってみてください。
オフィル

于 2013-04-23T16:56:51.500 に答える