Я использую System.Net.WebClient
для загрузки файла asynchron в моем приложении. По некоторым причинам, в некоторых системах процент вычисляется неправильно.WebClient DownloadFile, отображающий неверный процент
Мой (обновлено) DownloadProgressChanged событие:
WebClient client = new WebClient();
client.DownloadProgressChanged += (_sender, _e) => {
double bytesIn = _e.BytesReceived;
double totalBytes = _e.TotalBytesToReceive;
double percentage = bytesIn/totalBytes * 100;
UpdateConnectingStatus("Missionsdatei wird heruntergeladen... (" + Math.Truncate(percentage).ToString() + "%)");
};
Как это должно выглядеть (Windows 8.1 64bit):
Как это выглядит на некоторых системах (Windows 7 64-бит):
Может ли это иметь какое-то отношение к ОС? Или любые другие идеи?
ОБНОВЛЕНИЕ: я удалил подразделение (/ 1000000
) полностью, но он не работает ни в одной системе.
ОБНОВЛЕНИЕ 2: Я проверил значение totalBytes. Результат totalBytes равен -1 в системе, где он не работает. Есть идеи, почему это так?
UPDATE 3: У меня все еще нет решения, хотя я попытался удалить материал преобразования строк и добавить в раздел раздел .0
. Я думаю, что это зависит от медленного интернет-соединения, которое у человека есть, у которого он не работает. Теперь я показываю процент, если он положительный.
Попробуйте делить на 1000000.0 (с десятичной точкой). Код может выполнять целочисленное разделение и усечение части результатов. Странные результаты - это большое отрицательное число с шестнадцатеричными числами MSB, равными 0xFFFFFF. Похоже, что деление дает целое число вместо float. – jdweng
«Не может ли это иметь какое-то отношение к ОС?» Нет, ошибка принадлежит вам с 99.999999% уверенностью. используйте отладчик, чтобы увидеть, в какой точке значения вычисляются неправильно. Проблема с преобразованием строки funcy может быть проблемой, вы должны удалить это в любом случае. – usr
Если все, что вы показываете, является процентом, почему вы вообще делите на '1000000'? И почему вы используете 'ToString()' и затем разбираете строку? Внесите или преобразуйте его правильно. – Lloyd