Хорошо, так вот в чем дело:
У меня есть запрос linq, который загружает ок. 1000 строк в переменную, во время этого процесса я хочу отобразить индикатор выполнения, не обязательно указывающий процент, может быть в стиле выделения, не имеет значения.
Этот индикатор находится в модальной форме, чтобы запретить пользователю взаимодействовать с приложением во время выполнения запроса.
Теперь вот мой код:
Private Sub LoadBar()
Try
Dim load As New frmLoadbar
load.Text = "Loading bunch of data..."
load.ShowDialog()
Catch e As Threading.ThreadAbortException
Threading.Thread.ResetAbort()
End Try
End Sub
В другом подпункте:
Dim myThreadDelegate As New Threading.ThreadStart(AddressOf LoadBar)
Dim th As New Threading.Thread(myThreadDelegate)
th.Name = "TimeConsuming"
th.Start()
Dim XY = db.Table.GetEnumerator
While XY.MoveNext
Dim item As New ListViewItem
item.Text = XY.Current.Name
item.Tag = XY.Current
ListBox1.Items.Add(item)
End While
Autos.Dispose()
Try
th.Abort()
Catch ex As Exception //here's where i 'swallow the re-thrown exception
End Try
Не это один из самых уродливых кодов, которые я когда-либо писал. Это работает, я просто не хочу этого переброшенного исключения.
Некоторое объяснение:
- Я хочу закрыть модальную форму после выполнения запроса.
- По этой причине я 'прерываю' поток, выполняющий форму.
- Поскольку прерывание потока приводит к двойному исключению, мне нужно «проглотить»
это исключение.
Теперь я знаю, что могу реализовать это следующим образом:
- Кодирование цикла в форму, содержащую индикатор выполнения, который проверяет
периодически для логического значения, и если оно истинно, форма может
закрой себя.
- Из другой формы - в рабочем потоке - я мог бы изменить это
после завершения запроса логическое значение равно true.
Но вот мой вопрос:
Какой лучший способ реализовать это?
- Я знаю, что это можно сделать с помощью фонового работника, который был
специально придуманный по этой причине, но могу ли я использовать фон
рабочий как нить показывать прогрессбар?
- Если нет (и мне нужно выполнить запрос в фоновом режиме и
показывая модальную форму из моей первоначальной формы), это будет означать, что
запрос будет "работать в фоновом режиме"?
- Значит ли это, что запрос будет медленнее?
Я изучал другие учебные пособия, но по тем или иным причинам, либо я не смог скопировать его (из-за сложности), либо я не был уверен, что он лучше этого.
Спасибо, что уделили время на ответ.