#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; " %"
, и он отлично работает.