私は Web サービスが初めてで、WCF から始めました。複数の Web サービス呼び出しがあり、それぞれが非同期で行われます。しかし、私の問題は、すべての Web サービス呼び出しが返されるまでメインスレッドが停止し、すべての Web サービス呼び出しが返されたときにのみ続行する必要があることです。
ここで2つのことを試しました:
ブール変数と無限ループを使用してメインスレッドを停止しました。
Completed
Web サービス呼び出しのメソッドで値を変更します。その結果、無限ループが発生し、Completed
が呼び出されることはありませんでした。メイン スレッドから Web サービス呼び出しを行い、Web サービス呼び出しを行った後、メイン スレッドで Join メソッドを呼び出して、Web サービスが戻るまでこのスレッドを停止しました。
これはコード スニペットです:
ServerMonitoringBoardDataService.ServerMonitoringBoardDataServiceClient c = new ServerMonitoringBoardDataService.ServerMonitoringBoardDataServiceClient();
c.GetEnvironmentAndServersCompleted += new EventHandler<ServerMonitoringBoardDataService.GetEnvironmentAndServersCompletedEventArgs>(c_GetEnvironmentAndServersCompleted);
c.GetEnvironmentAndServersAsync();
void c_GetEnvironmentAndServersCompleted(object sender, ServerMonitoringBoardDataService.GetEnvironmentAndServersCompletedEventArgs e)
{
var x = e.Result;
}
私が問題に直面している理由は、複数の Web サービス呼び出しがデータをリストとして返し、このデータに対していくつかの操作を行ってから UI に表示したことです。一度だけデータを操作し、何度も表示します。
しかし、何が起こるかというと、データがフェッチされて操作の実行に移るまでメインスレッドが停止せず、そこで Null 例外が発生します。
私に解決策を提案し、上記のアプローチがうまくいかなかった理由も教えてください。
これに関するあらゆる種類の助けを前もって感謝します。