Frage

Mein Code ruft ein Web Service Methode, die einige Minuten dauert die Operation durchzuführen. Während dieser Zeit wird mein Fenster nicht reagiert, und es zeigt einen kompletten weißen Bildschirm.

Ich möchte nicht auf die Call-Methode von einem anderen Thread.

Es es der beste Weg, es zu behandeln?

Umwelt: C #, Web-Service

War es hilfreich?

Lösung

Sie können den Antrag auf einem separaten Thread machen, die der UI-Thread reagiert, verlassen werden. Sie finden die Antwort zurück an den UI-Thread synchronisieren müssen, sobald Sie fertig sind.

Andere Tipps

Die Background ist dein Freund.

Hier ist ein Beispiel , wie ich einen Background verwenden mit einem WebService. Im Grunde gibt es keine Möglichkeit intensive Operationen auf der UI Seite zu tun, ohne einen separaten Thread verwendet wird. Die Background ist die schönste Art und Weise auf einem separaten Thread von ausgeführt wird.

Um eine ansprechende Benutzeroberfläche zu haben, müssen Sie einen anderen Thread verwenden.

Aber wenn Sie Visual Studio verwenden, die generierte Client-Klasse hat asynchrone Methodensignaturen weicht es für Sie tun würde. Wenn Ihre Methode ist „GetData“, dann sollten Sie eine Methode „GetDataAsync“ Weicht genannt hätten das Fenster nicht einfrieren.

Hier ist ein Beispiel:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top