Мне нужно реализовать функцию Bandwidth Throttling в приложении Windows. Есть два потока на SO:Регулирование полосы пропускания в приложении C# windows
- How to programatically limit bandwidth usage of my c# windows forms application
- Bandwidth throttling in C#
Но это для веб-приложения. Мне нужно это для windows app. Как я могу реализовать его в окнах? Могу ли я использовать вышеупомянутые ссылки для приложений Windows?
Вот код, я использую:
// Apply bandwidth control
int uploadLimit = GlobalClass.GetFileUploadLimit();
if (uploadLimit > 0)
{
long bps = uploadLimit * 1024;
const int BufferSize = 8192;
MemoryStream mstream = new MemoryStream();//Stream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize);
// Openup source stream.
using (FileStream sourceStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize))
{
// Create throttled destination stream.
ThrottledStream destinationStream = new ThrottledStream(mstream, bps);
byte[] buffer = new byte[BufferSize];
int readCount = sourceStream.Read(buffer, 0, BufferSize);
while (readCount > 0)
{
destinationStream.Write(buffer, 0, readCount);
readCount = sourceStream.Read(buffer, 0, BufferSize);
client.FileUpload(Convert.ToInt16(userId), System.IO.Path.GetFileName(fileName), buffer);
//Webservice: Here is the problem
}
}
}
В приведенном выше коде, есть веб-сервис я использую, чтобы загрузить файл. Эта веб-служба берет целый файл в байтах сразу. Поэтому в этом случае я не могу загрузить файл в куски. Может ли кто-нибудь предложить мне какой-то способ выполнить это или должен ли я изменить обслуживание, чтобы принимать данные в кусках?
Вторая ссылка, которую вы опубликовали, имеет ссылку на пример ThrolledStream. Это должно работать для вашего приложения Windows. – akhisp
Я использовал тот же класс дросселирования из ссылки. См. Мой код выше. –
Вы не написали код, который загружает, ясно, что вы ничего не можете сделать, чтобы изменить способ его работы. –