0

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

別のスレッドからメソッドを呼び出したくありません。

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

環境: C#、Web サービス

4

3 に答える 3

2

BackgroundWorkerはあなたの友達です。

WebService で BackgroundWorker を使用する方法の例を次に示します。基本的に、別のスレッドを使用せずに UI 側で集中的な操作を行う方法はありません。BackgroundWorker は、別のスレッドで実行する最も優れた方法です。

于 2009-10-29T11:03:09.667 に答える
1

レスポンシブ 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;
}
于 2009-10-29T11:04:26.797 に答える
0

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

于 2009-10-29T11:03:54.533 に答える