私のコードは、操作の実行に数分かかるWeb サービスメソッドを呼び出します。その間、ウィンドウが応答しなくなり、完全に白い画面が表示されます。
別のスレッドからメソッドを呼び出したくありません。
それはそれを処理するための最良の方法ですか?
環境: C#、Web サービス
私のコードは、操作の実行に数分かかるWeb サービスメソッドを呼び出します。その間、ウィンドウが応答しなくなり、完全に白い画面が表示されます。
別のスレッドからメソッドを呼び出したくありません。
それはそれを処理するための最良の方法ですか?
環境: C#、Web サービス
BackgroundWorkerはあなたの友達です。
WebService で BackgroundWorker を使用する方法の例を次に示します。基本的に、別のスレッドを使用せずに UI 側で集中的な操作を行う方法はありません。BackgroundWorker は、別のスレッドで実行する最も優れた方法です。
レスポンシブ UI を使用するには、別のスレッドを使用する必要があります。
ただし、Visual Studio を使用する場合、生成されたクライアント クラスには、それを行う非同期メソッド シグネチャがあります。メソッドが「GetData」の場合、ウィンドウをフリーズさせない「GetDataAsync」というメソッドが必要です。
例を次に示します。
WsClient client;
protected override void Load() {
base.Onload();
client = new WsClient();
client.GetDataCompleted += new GetDataCompletedEventHandler(client_GetDataCompleted);
}
//here is the call
protected void Invoke()
{
client.GetDataAsync(txtSearch.Text);
}
//here is the result
void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
//display the result
txtResult.Text = e.Result;
}
別のスレッドで要求を行うことができます。これにより、UI スレッドは応答したままになります。完了したら、応答を UI スレッドに同期する必要があります。