Ich muss ein Download-Rate-Limit für meine Datei-Downloader-Anwendung implementieren, und ich habe die ThrottledStream
Klasse von CodeProject angeschaut, aber das wird in meinem Fall nicht funktionieren, da ich in der Lage sein muss das Limit während eines Downloads zu ändern, nicht nur am Anfang. Hier ist ein Teil der Download-Methode, die ich in einem Hintergrund-Thread bin mit:Download-Manager - Limit Download-Geschwindigkeit
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;
}
}
Ich habe auch Leute gesehen, mit Thread.Sleep() oder Thread.Wait(), aber es ist eine gute Idee? Hast du irgendwelche Vorschläge, wie ich das in dieser While-Schleife machen könnte?
ich brauche CalcFileSize Methode, um zu sehen – mehrdad