2009-10-08 3 views
0

J'ai récemment commencé cette question dans un autre fil (à laquelle Reed Copsey a gracieusement répondu) mais je ne pense pas que j'ai bien cadré la question.Code de verrouillage de processus Illustration nécessaire

Au cœur de ma question, je voudrais une illustration de la façon d'obtenir l'accès aux données AS en cours d'obtention/réglage.

je Page.aspx.cs et, dans le codebehind, j'ai une boucle:

  List<ServerVariable> files = new List<ServerVariable>(); 

      for (i = 0; i <= Request.Files.Count - 1; i++) 
      { 

        m_objFile = Request.Files[i]; 
        m_strFileName = m_objFile.FileName; 
        m_strFileName = Path.GetFileName(m_strFileName); 

       files.Add(new ServerVariable(i.ToString(), 
this.m_strFileName, "0")); 

      } 

      //CODE TO COPY A FILE FOR UPLOAD TO THE 
      //WEB SERVER 

      //WHEN THE UPLOAD IS DONE, SET THE ITEM TO 
      //COMPLETED 

      int index = files.FindIndex(p => p.Completed == "0"); 
      files[index] = new ServerVariable(i.ToString(), 
this.m_strFileName, "1"); 

Le type "ServerVariable" obtient et définit ID, fichier, et complété.

Maintenant, je dois montrer à l'utilisateur le chargement de fichier « progrès » (en effet, le temps entre le moment où la boucle ajoute l'élément ServerVariable à la liste lorsque les changements d'état Terminé de 0 à 1.

Maintenant, j'ai une méthode de service Web "GetStatus()" que je voudrais utiliser pour renvoyer la liste de fichiers (créée ci-dessus) comme une chaîne JSON (via JQuery) .Les fichiers avec un état complet de 0 sont toujours en cours, les fichiers avec un 1 sont terminés

MON QUESTION EST - que fait le code dans GetStatus() lo ok comme? Comment dois-je interroger Liste ** comme * il est rempli et renvoie les résultats en temps réel? J'ai été informé que je dois verrouiller le processus de travail (définissant les données ServerVariable) pendant que j'interroge les valeurs renvoyées dans GetStatus(), puis déverrouiller le même processus?

Si je me suis bien expliqué, j'apprécierais une illustration de code de la logique dans GetStatus().

Merci d'avoir lu.

Répondre

0

Jetez un oeil à this lien sur multi-threading locks.

Vous devez verrouiller l'objet en lecture et en écriture.