Мне нужно реализовать ограничение скорости загрузки для моего приложения для загрузки файлов, и я просмотрел класс ThrottledStream
из CodeProject, но это не сработает в моем случае, так как я должен иметь возможность изменить ограничение во время загрузки, а не только в начале. Вот часть метода загрузки, который я использую в фоновом потоке:
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;
}
}
Я также видел людей, использующих Thread.Sleep() или Thread.Wait(), но хорошая ли это идея? Есть ли у вас какие-либо предложения, как я могу сделать это внутри цикла while?