0

テーブルにデータを挿入するストアド プロシージャを実行しようとしています。それを行った後、ローカルマシンに保存されているExcelを更新しています(このExcelにはdbへのデータ接続があります)更新に時間がかかるため、問題が発生しています。その後、Excelを保存したい-呼び出されています早い。更新が完了したら、Excel から制御を取り戻したいです。

C# で Excel のステータスを読み取ることはできますか?

現在のスレッドをブロックし、他のスレッドで Excel を更新する非同期コードを使用しようとしています。このアプローチの問題は、更新がまだ実行されているにもかかわらず、スレッドがすぐに返される (task.iscompleted が true を返す) ことです。

どうすればこれを回避できますか?

また:

  • シートを個別に更新できますか?
  • 更新が完了したら、制御を .NET に戻すことはできますか?

これは更新タスクのコードです。

    private static async Task refreshExcelAsync(Excel.Workbook sampleWorkBook)
    {

        Task t = new Task
        (
            () =>
            {
                sampleWorkBook.RefreshAll();

            }
        );
        t.Start();

        await t;
    }

そして、私は次を使用してこの関数を呼び出しています:

 Task refreshExcelTask = refreshExcelAsync(sampleWorkBook);
 Task t = await Task.WhenAny(refreshExcelTask);

この呼び出しの後、条件 t.IsCompleted に基づいて saveExcel タスクを呼び出しています

しかし、この条件は常に true を返します!

4

1 に答える 1