2010-01-26 7 views
2

Lorsque j'appuie sur le bouton Exécuter (dans Default.aspx), un processus démarre (ce processus contacte un service Web pour obtenir des fichiers, etc.). Comment puis-je:Suivi du processus d'un processus singleton dans une application Web

  1. Assurez-vous qu'un seul processus est en cours d'exécution à un moment (à savoir si j'Actualisez le navigateur, je ne veux pas commencer le processus une seconde fois)

  2. Suivre les progrès - Il y a 4 points du processus (à 25%, 50%, 75%, 100%) que je veux suivre, et quand chaque partie se termine, je veux mettre à jour la barre de progression. J'ai un objet d'état pour le processus en cours, mais la question est de savoir comment mettre à jour la barre de progression automatiquement?

  3. Ai-je besoin d'utiliser des threads pour réaliser les deux précédents?

Répondre

0

Répondre à ces questions dans l'ordre inverse:

  1. Oui. Et vous devriez avoir un objet pour encapsuler votre fil.

  2. Vous pourriez avoir un membre public de votre objet qui contient le% fait de votre processus. Vous pourriez interroger cela périodiquement. La façon dont vous le feriez à partir de votre page HTML est probablement une requête AJAX pour rendre votre barre de progression la plus lisse possible.

  3. Vous devez effectuer une synchronisation de threads. Peut-être à travers un Mutex. Here's a good example of how to do this (faites défiler vers le bas pour Mutex).

+0

Merci. Pourriez-vous s'il vous plaît expliquer pourquoi j'aurais besoin de discussions dans ce scénario? Je n'ai qu'un seul processus et aucune activité parallèle. Si je stocke l'objet Process (ou simplement l'objet Status, qui possède une propriété IsRunning) dans le HttpApplicationState, je peux accéder au processus en cours chaque fois que le navigateur est actualisé correctement? – Prabhu

+0

@Swami. Vous avez réellement plus d'un thread. Si vous exécutez votre requête sur le même thread sur lequel la page est traitée, la page ne sera jamais renvoyée à l'utilisateur. Voilà pourquoi vous voulez lancer un nouveau fil pour gérer votre tâche. De même, vous ne souhaitez pas lier les threads IIS avec une activité d'arrière-plan comme votre activité de traitement. – Keltex

+0

@Keltex. Merci ... encore une question ... Je veux m'assurer que si la page est ouverte à partir d'un navigateur sur un autre ordinateur, et si le processus est en cours, la page devrait indiquer l'état, au lieu de présenter le bouton Exécuter. Serait-ce possible? – Prabhu