2015-08-28 3 views
0

Этот фрагмент загрузки FTP вызывает в «арифметическая операция приводит к переполнению» ошибки для некоторых файлов формата на линии bWorker.Report ПрогрессАрифметика переполнение прогресс бар

Dim fileStream() As Byte = System.IO.File.ReadAllBytes(TextBox1.Text) 
    Dim requestStream As System.IO.Stream = request.GetRequestStream() 
    For offset As Integer = 0 To fileStream.Length Step 1024 
     bWorker.ReportProgress(CType(offset * ProgressBar1.Maximum/fileStream.Length, Integer)) 
     Dim chSize As Integer = fileStream.Length - offset 
     If chSize > 1024 Then chSize = 1024 
     requestStream.Write(fileStream, offset, chSize) 
    Next 

Что я сделал не так?

+1

Каковы значения offset, ProgressBar1.Maximum и fileStream.Length при получении ошибки? Вы пробовали 'CDbl (offset)/fileStream.Length * ProgressBar1.Maximum'? –

+0

Я довольно новичок в Vb.net - что представляет собой визуальный студийный эквивалент console.log в браузере ?! Как я могу увидеть эти значения в режиме отладки при запуске? – andymoyle

+0

Это модифицированное выражение сработало! Спасибо – andymoyle

ответ

0

Похоже, что значение offset * ProgressBar1.Maximum становится больше Integer.MaxValue (2147483647).

Вы можете избежать переполнения при выполнении расчетов в другом порядке:

bWorker.ReportProgress(CType(offset/fileStream.Length * ProgressBar1.Maximum, Integer)) 

И так случилось, что CType (х, Integer) может быть сокращен до CInt (х), так что вы могли бы написать чем меньше:

bWorker.ReportProgress(CInt(offset/fileStream.Length * ProgressBar1.Maximum)) 
Смежные вопросы