J'ai une application web qui compte les mots d'un document. donc cela prend assez de temps.J'ai divisé cela en pages et méthode invoquée pour chaque page dans un fil différent. J'utilise threadpool commeasp.net Multithreading avec timer
ThreadPool.SetMaxThreads(25, 200);
State state;
Hashtable ht = new Hashtable();
for (int i = 0; i < 100; i++)
{
state = new State();
state.Input = "Pakistan";
ThreadPool.QueueUserWorkItem(PerformUserWorkItem, state);
ht.Add(i, state);
}
State tempState;
for (int i = 0; i < 100; i++)
{
tempState = (State)ht[i];
if (tempState.eventWaitHandle.WaitOne())
{
Session["percentage"] = i;
lblPercentage.Text = (i * 1).ToString();
}
}
private static void PerformUserWorkItem(Object stateObject)
{
State state = stateObject as State;
if (state != null)
{
// do something lengthy with state.inputString
state.result = state.Input.Length;
state.eventWaitHandle.Set(); // signal we're done
}
}
Dans le code ci-dessus j'ai mis en attente pour les discussions de travail et sauvé leur état initial dans la table de hachage. J'ai timer qui met à jour la barre de progression sur la page que combien de pages de comptage est fait et combien reste.
J'ai besoin de rediriger ma page vers une autre page et j'obtiens l'erreur que Réponse n'est pas disponible dans ce contexte. J'ai essayé d'utiliser le Server.Transfer mais obtenir l'erreur comme
« erreur enfant exécution demande » alors j'ai désactivé la page cible (à laquelle je suis redirigez) propriété enabeviewstate = false mais aussi didn » t travaillé pour moi. après tout cela mon studio visuel se coincé et j'obtiens cette erreur deux fois "localhost ne peut pas se connecter au serveur web local" après l'erreur 2 fois mon studio visuel fonctionne très bien.
Mise à jour
Voici ma
System.Timers.Timer t = new System.Timers.Timer(3000);
t.Enabled = true;
t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
lbl1.Text = DateTime.Now.ToString();
}
Quel type de minuterie utilisez-vous? – Hinek
Note de côté: Pourquoi une table de hachage? –
Effectuez-vous ce travail dans une seule requête? Vous pouvez exécuter une tâche longue dans une requête, mais vous ne pouvez pas mettre à jour un contrôle (comme votre 'lbl1'), sauf si vous utilisez des contrôles ajax. Utilisez-vous WebForms ou MVC? –