Question

Mon code appelle une méthode service Web qui prend quelques minutes pour effectuer l'opération. Pendant ce temps, ma fenêtre ne répond plus et affiche un écran blanc complet.

Je ne souhaite pas utiliser la méthode call d'un autre thread.

Est-ce la meilleure façon de le gérer?

Environnement: C #, service Web

Était-ce utile?

La solution

Vous pouvez effectuer la demande sur un thread séparé, ce qui laissera le thread UI sensible. Une fois que vous avez terminé, vous devrez synchroniser la réponse sur le fil de l'interface utilisateur.

Autres conseils

Le BackgroundWorker est votre ami. / p>

Voici un exemple de mon utilisation de BackgroundWorker. avec un WebService. En gros, il n’ya aucun moyen de faire des opérations intensives du côté de l’UI sans utiliser un thread séparé. BackgroundWorker est la meilleure façon de s'exécuter sur un thread séparé.

Pour avoir une interface utilisateur réactive, vous devez utiliser un autre thread.

Mais si vous utilisez Visual Studio, la classe de client générée a des signatures de méthodes asynchrones qui le feraient pour vous. Si votre méthode est "GetData", vous devez utiliser une méthode appelée "GetDataAsync". qui ne gèlerait pas votre fenêtre.

Voici un exemple:

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top