Изменение процента загрузки в Listview в VB.Net

#vb.net #listview #webclient-download

#vb.net #listview #webclient

Вопрос:

Я отображаю процент загрузки загружаемого файла в listview, используя DownloadProgressChanged событие webclient.

Код работает отлично, когда я отображаю «Overallpercent» в label, но он выдает мне «System.NullReferenceException: «Ссылка на объект не установлена для экземпляра объекта». ошибка после нескольких циклов, если я пытаюсь отобразить то же самое в listview.

Мой код для изменения подпункта listview приведен ниже

 Private Sub downloadprogressruntimemade(currentimage As Integer, totalimages As Integer, li As ListViewItem, indexnumberforlv As Integer, ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)

        Dim li1 As ListViewItem = li
        Dim overallpercent = Math.Round((currentimage / totalimages) * 100, 2)   Math.Round(e.ProgressPercentage / 1 / totalimages, 2)
        li1.SubItems.Insert(indexnumberforlv, New ListViewItem.ListViewSubItem(Nothing, overallpercent amp; " %"))
        refreshcontrol(LVsessionnotfound)
               
End Sub
  

Чего мне здесь не хватает?

Комментарии:

1. Первым аргументом конструктора ListViewSubItem не может быть ничего. Вместо этого передайте li1. Не единственная ошибка в этом коде, повторная вставка не имеет смысла.

2. Почему вы повторно объявляете li как li1 ? Кроме того, я предлагаю вам установить точки останова, чтобы увидеть, какая переменная является ничем, когда она не может быть ничем. Это должно помочь вам найти основную причину.

3. @HansPassant есть ли какой-либо другой способ, кроме как не вставлять? Я хочу обновить значение до более нового (например, изменить 57% на 63%).. Я не разработчик жесткого кода, поэтому у меня очень мало знаний в этом.

4. @Audiopolis Я не объявлял об этом ранее, но когда я начал получать сообщение об ошибке, я подумал об этом .. я знаю, что это не имеет смысла.. Но поскольку это событие in progresschanged обработчика webclient продолжает получать новые значения, поэтому я подумал об этом. Мои точки останова всегда включены, но я не смог найти ничего, кроме того, что это связано с listview, потому что тот же код отлично работает с label вместо listview

5. @HansPassant, можете ли вы помочь мне выявить любую другую ошибку в коде? Это помогло бы мне в долгосрочной перспективе.. Кроме того, я присвоил значение overallpercent как десятичное, если это то, на что вы указывали..

Ответ №1:

Думаю, я нашел ошибку, спасибо @Hans Passant за упоминание о том, что insert был бы неправильным способом сделать это.. Я изменил insert на li.SubItems(1).Text = overallpercent amp; " %" , и он отлично работает.