テーブルにデータを挿入するストアド プロシージャを実行しようとしています。それを行った後、ローカルマシンに保存されている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 を返します!