Я прочитал другие сообщения об этом, но я все еще не могу заставить его работать правильно.BackgroundWorker freezes GUI
Всякий раз, когда мой BackgroundWorker начинает работать, моя функция API.CheckForUpdate заставляет графический интерфейс зависать. Я не могу нажимать ни на что. Он только замерзает на полсекунды, но этого достаточно заметить.
Как это исправить? Должен ли я погрузиться глубже в API.CheckForUpdate и запускать отдельные потоки в определенных операторах, или я могу просто использовать всеохватывающий поток, который обрабатывает это? API.CheckForUpdate ничего не ссылается на Form1.
Кроме того, я предполагаю, что Form1_Load не является лучшим местом для вызова RunWorkerAsync. Где лучшее место?
'Declarations
Dim ApplicationUpdate As BackgroundWorker = New BackgroundWorker
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ApplicationUpdate.WorkerSupportsCancellation = True
ApplicationUpdate.WorkerReportsProgress = True
AddHandler ApplicationUpdate.DoWork, AddressOf ApplicationUpdate_DoWork
AddHandler ApplicationUpdate.ProgressChanged, AddressOf ApplicationUpdate_ProgressChanged
AddHandler ApplicationUpdate.RunWorkerCompleted, AddressOf ApplicationUpdate_RunWorkerCompleted
ApplicationUpdate.RunWorkerAsync()
End Sub
Private Sub ApplicationUpdate_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
'Check for an update (get the latest version)
Dim LatestVersion = API.CheckForUpdate
End Sub
Private Sub ApplicationUpdate_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
'Nothing here
End Sub
Private Sub ApplicationUpdate_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
'Work completed
MsgBox("Done")
End Sub
Можете ли вы опубликовать метод CheckForUpdates? – OneFineDay
Могу, но очень долго. В основном он создает WebRequest для запроса веб-сайта с использованием запроса GET и считывает его в память с помощью StreamReader. Например, веб-сайт содержит номер версии - 2,4 - например. – Brady