Ho bisogno di implementare un limite di velocità di download per la mia applicazione di downloader di file, e ho esaminato la classe ThrottledStream
da CodeProject, ma questo non funzionerà nel mio caso dato che devo essere in grado per modificare il limite durante il download, non solo all'inizio. Ecco una parte del metodo di download che sto usando in un thread in background:Download manager - limite velocità download
webResponse = (HttpWebResponse)webRequest.GetResponse();
responseStream = webResponse.GetResponseStream();
responseStream.ReadTimeout = 5000;
downloadCache = new MemoryStream(this.MaxCacheSize);
byte[] downloadBuffer = new byte[this.BufferSize];
int bytesSize = 0;
CachedSize = 0;
int receivedBufferCount = 0;
while (true)
{
bytesSize = responseStream.Read(downloadBuffer, 0, downloadBuffer.Length);
if (this.Status != DownloadStatus.Downloading || bytesSize == 0
|| this.MaxCacheSize < CachedSize + bytesSize)
{
WriteCacheToFile(downloadCache, CachedSize);
this.DownloadedSize += CachedSize;
downloadCache.Seek(0, SeekOrigin.Begin);
CachedSize = 0;
if (this.Status != DownloadStatus.Downloading || bytesSize == 0)
break;
}
downloadCache.Write(downloadBuffer, 0, bytesSize);
CachedSize += bytesSize;
receivedBufferCount++;
if (receivedBufferCount == this.BufferCountPerNotification)
{
this.RaiseDownloadProgressChanged();
receivedBufferCount = 0;
}
}
Ho persone anche visto che utilizzano Thread.Sleep() o Thread.Wait(), ma è una buona idea? Hai qualche suggerimento su come potrei farlo all'interno di questo ciclo while?
ho bisogno di vedere il metodo CalcFileSize – mehrdad