Мне нужно написать апплет VB.Net 2008, чтобы пройти через все стационарные диски, которые ищут некоторые файлы. Если я ставлю код в ButtonClick(), пользовательский интерфейс замерзает, пока код не будет сделан:Как предотвратить зависание пользовательского интерфейса во время длительного процесса?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'TODO Find way to avoid freezing UI while scanning fixed drives
Dim drive As DriveInfo
Dim filelist As Collections.ObjectModel.ReadOnlyCollection(Of String)
Dim filepath As String
For Each drive In DriveInfo.GetDrives()
If drive.DriveType = DriveType.Fixed Then
filelist = My.Computer.FileSystem.GetFiles(drive.ToString, FileIO.SearchOption.SearchAllSubDirectories, "MyFiles.*")
For Each filepath In filelist
'Do stuff
Next filepath
End If
Next drive
End Sub
Google вернулся информация о контроле BackgroundWorker: Является ли это право/способом решить эту проблему? Если нет, то какое решение вы бы порекомендовали, возможно, с очень простым примером?
FWIW, я прочитал, что Application.DoEvents() является левым с VBClassic и его следует избегать.
Спасибо.
Если вы собираетесь использовать решение bg-worker, обратите внимание на исключения для кросс-потоков при доступе к элементам управления через другой поток, это может стать сложным. http://msdn.microsoft.com/en-us/library/ms171728(VS.80).aspx – invert