|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
C#:Finestra avanzamento download problematica
Salve a tutti, ho scritto 2 piccoli programmi di prova, un server ed un client. Il client chiede al server 2 file che glieli invia. I programmi funzionano senza problemi. Sono programmi Console.
Ora volevo provare ad inserire una piccola finestra, al client, per visualizzare l'avanzamento del download, ma ho dei problemi. In pratica se non tocco nulla, la finestra viene aggiornata correttamente, almeno di solito a volte però si incanta da sola. Se porto la finestra in secondo piano (o provo a muoverla) non si aggiorna più. Nonostante la finestra non si aggiorni, il download va a buon fine (faccio anche stampare su console l'andamento del download e lì tutto procede senza problemi). Perchè questo comportamento? Come posso risolverlo? Mi interessa parecchio perchè dovrei importare questi pezzi di codice in un programma più grande. Di seguito incollo i pezzi di codice del client(che è un'applicazione console) che richiama un metodo della finestra che visualizza l'andamento del download ed il codice (non quello generato in automatico da visual studio, ma quello scritto da me) della classe che rappresenta la finestra di avanzamento download (è molto semplice). Client: Codice:
FinestraInfo fi = new FinestraInfo(); fi.Show(); for (int i = 0; i < numeroFile; i++) { Byte[] dimensione = new Byte[1024]; int j= vs.Read(dimensione, 0, dimensione.Length); String dim = Encoding.ASCII.GetString(dimensione, 0, j); long dime = long.Parse(dim); long rby=0; daScrivere = Encoding.ASCII.GetBytes("OK"); vs.Write(daScrivere, 0, daScrivere.Length); FileStream fout = new FileStream(".\\inviati\\"+nomeFile[i], FileMode.OpenOrCreate); while (rby < dime) { byte[] buffer = new byte[1024]; //Read from the Network Stream j = vs.Read(buffer, 0, buffer.Length); fout.Write(buffer, 0, (int)j); rby = rby + j; int pc = (int)(((double)rby / (double)dime) * 100.00); fi.updateProgress(pc, (i+1), numeroFile); } fout.Flush(); fout.Close(); Byte[] mex = Encoding.ASCII.GetBytes("FINITO PRIMO" + (i + 1)); vs.Write(mex, 0, mex.Length); Console.WriteLine("FINITO :"+(i+1)); } fi.Close(); fi.Dispose(); Codice:
public partial class FinestraInfo : Form { public FinestraInfo() { InitializeComponent(); } public void updateProgress(Int32 percentuale, Int32 numeroFile, Int32 totFile) { progressBar1.Value = percentuale; label1.Text = "Scaricato il " + percentuale + "% del file " + numeroFile + "/" + totFile; this.Refresh(); } } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:33.