2010-06-08 3 views
1

J'ai une page ASPX qui, sur un clic de bouton, crée un BackgroundWorker, puis appelle la méthode RunWorkerAsync. Dans mon fichier aspx, j'ai défini Async='true' mais lorsque j'exécute l'application et que je clique sur le bouton, il apparaît que la page attend son actualisation jusqu'à ce que le traitement de BackgroundWorker soit terminé. Comment puis-je obtenir le contrôle pour revenir à la page (et avoir l'actualisation de la page) après que BackgroundWorker a été créé et démarré?Page non rendue jusqu'à ce que BackgroundWorker.RunWorkerAsync se termine

BackgroundWorker worker = new BackgroundWorker(); 
    worker.DoWork += RunJob; 
    worker.RunWorkerCompleted += JobCompleted; 
    worker.RunWorkerAsync(); 

Répondre

3

Les pages asynchrones sont géniales, mais elles ne font pas ce que vous pensez. Vous devez réellement compléter la requête pour que la page soit rendue. Ensuite, vous pouvez envoyer une autre requête (asynchrone JavaScript) au serveur, interrogeant pour l'achèvement.

L'utilisation d'un BackgroundWorker ne fonctionnera pas pour cela. Vous devez lancer une tâche d'arrière-plan (ou un thread, si le recyclage d'application n'est pas un problème) et suivre l'exécution de ces opérations vous-même. Ensuite, lorsque la requête "est-ce que c'est fait" arrive, répondez avec un message "pas encore" ou les résultats.

+0

J'avais le sentiment que ce serait la réponse mais je voulais vérifier. Merci! – brainimus

0

solution simple ...

Response.Redirect("MyNewPage.aspx", true); 

// Code to kick off thread. 

BackgroundWorker worker = new BackgroundWorker(); 
worker.DoWork += RunJob; 
worker.RunWorkerCompleted += JobCompleted; 
worker.RunWorkerAsync(); 

Cela provoque la réponse à remplir et faire une redirection tandis que les 4 lignes de code sont exécutées restantes.

également ...

Vous ne devez pas passer par la peine d'écrire un travailleur de fond. Vous pouvez simplement exécuter vos tâches d'arrière-plan normalement après la commande Response.Redirect (..).

Espérons que cela aide.