我已阅读关于此的其他帖子,但我似乎仍然无法让它正常工作。BackgroundWorker冻结图形用户界面
每当我的BackgroundWorker开始工作,我的函数API.CheckForUpdate导致GUI挂起。我无法点击任何东西。它只会冻结半秒钟,但足以注意到。
我该如何解决这个问题?我是否应该深入探讨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