質問

私のコードは、 Webサービスメソッドを呼び出します。このメソッドは、操作の実行に数分かかります。 その間、ウィンドウは応答しなくなり、完全な白い画面が表示されます。

別のスレッドからメソッドを呼び出したくない。

それを処理する最良の方法ですか?

環境:C#、Webサービス

役に立ちましたか?

解決

別のスレッドでリクエストを行うことができます。これにより、UIスレッドが応答しやすくなります。完了したら、応答をUIスレッドに同期する必要があります。

他のヒント

BackgroundWorker は友達です。

こちらは、 BackgroundWorkerの使用方法の例です。 WebServiceで。基本的に、別のスレッドを使用せずに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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top