2010-05-20 4 views
0

J'ai le code ci-dessous que j'utilise pour télécharger des fichiers sur ma page ashx. Cela fonctionne très bien, bien que je ne peux pas sembler trouver un bon moyen d'obtenir combien il a transféré.Téléchargement de fichiers dans .net avec WebClient (et silverlight)

Le code d'appel:

WebClient wc = new WebClient(); 
wc.OpenWriteCompleted += (s2, e2) => 
{ 
    PushData(e2.Result, offset); 
    e2.Result.Close(); 
}; 
wc.OpenWriteAsync(ub.Uri); 

Le code de données Push:

private void PushData(Stream output, long offset) 
{ 
    byte[] buffer = new byte[4096]; 
    int bytesRead; 
    bytesRead = theFileStream.Read(buffer, 0, buffer.Length); 
    if (bytesRead != 0) 
    { 
     output.Write(buffer, 0, bytesRead); 

     totalBytesDone += bytesRead; 
     FireUpdateEvent(bytesRead); 
    } 
} 

Le code ci-dessus est un peu différent de mon code réel, par souci de brièveté. Maintenant, j'avais supposé que quand il arrivera à output.Write(buffer,0,bytesRead); que c'était le point où il a envoyé les données réelles et il se bloquerait et seulement passerait à la ligne suivante une fois qu'il a fini d'écrire cette section. Mais il continue à totalBytesDone += bytesRead; avant son écrit quelque chose au serveur. Je suppose que la raison est qu'il fait l'écriture dans un fil séparé en arrière-plan (ou je regarde en fait la mauvaise section de code et il écrit ailleurs) - mais pour mon code de travail je voulez à enfermer jusqu'à son envoi fini (je peux mettre tout cela dans un fil séparé plus tard). J'ai téléchargé des tonnes d'exemples pour ce faire et ils ne fonctionnent pas correctement avec mon gestionnaire de fichiers ashx (je ne peux pas le changer) ou ils utilisent une méthode WebClient qui rapporte seulement 50% de progrès.

Répondre

0

Jetez un oeil à this answer.

+0

Merci, mais malheureusement, Silverlight ne prend pas en charge l'ensemble des méthodes. – Matt

+0

Eh bien alors vous devrez recourir à HttpWebRequest/HttpWebResponse. –

+0

Merci, va essayer. – Matt

Questions connexes