2014-04-23 2 views
0

Использование нижеприведенного мероприятия: Как показать общее время, оставшееся для файла Передача хода выполнения работает нормально, но я хотел бы показать сумму оставшееся время, если это возможноВсего EST Время для загрузки

Private Sub onTransferProgress(ByVal source As String, ByVal destination As String, ByVal transferredBytes As Integer, ByVal totalBytes As Integer, ByVal message As String) Handles transfer.onTransferProgress 
    Dim totalbytess As Long = transferredBytes/1024 
    Dim mtotalbytes As Long = totalbytess/1024 
    Dim status As String = "" 
    status = status & " Transfering Files - transferred: " & source & " to " & destination 


    Me.ProgressBar1.Value = transferredBytes 
    status = status & "Transferring.. " & (ProgressBar1.Value/1024).ToString() 

    Me.tbStatus.Text = status 
    lblWorking.Text = message 
    lblWorking.Visible = True 

End Sub 
+3

http://xkcd.com/612/ –

ответ

1

Многие индикаторы прогресса в наши дни не делают этого, потому что информация не всегда надежна. Прошлая производительность не гарантирует будущих результатов.

Но если вы хотите, вне этого метода, после начала загрузки вы хотите сохранить текущее время. Затем в этом методе подсчитайте количество секунд, прошедших с того времени. Тогда у вас просто будет простая математика. transferredBytes занял X секунд, поэтому totalbytess должен занять Y секунд.

Итак, если вы передаете 10 МБ (10485760 байт), и вы получили 2 МБ (2097152 байт) и прошло 20 секунд, вы переходите со скоростью 104 857,6 байт/сек. У вас осталось 8 МБ (8388608), поэтому 8388608, деленный на 104 857,6, составляет 80 секунд.

Dim remainingBytes = totalbytess - mtotalbytes 
Dim currentTransferRate = mtotalbytes/<your time calculation here> 
Dim remainingSeconds = remainingBytes/currentTransferRate 
Смежные вопросы