作者:小白牛 | 来源:互联网 | 2023-10-12 11:34
我在Winform上有一个ListView,可以将文件拖放到该列表上。这些文件随后由我的应用程序处理。
可能有大量文件,为了保持应用程序的响应速度,我正在使用BackgroundWorker。
我想避免重复的文件被添加到ListView。这使我进入了想要直接从工作线程访问UI组件但无法访问UI组件的领域。
Private Sub BackgroundWorkerFiles_DoWork(sender As Object,e As System.ComponentModel.DoWorkEventArgs)
Dim files() As String = CType(e.Argument,IDataObject).GetData(DataFormats.FileDrop)
Dim items As List(Of ListViewItem) = New List(Of ListViewItem)
For Each path In files
Dim item = GetFileItem(path)
If Not Isnothing(item) Then
'*****
'ADD CODE HERE TO CHECK IF FILE ALREADY EXISTS IN LISTVIEW
'IF IT DOES DO NOT ADD
'CANNOT QUERY UI FROM BACKGROUNDWORKER
'*****
items.Add(item)
If items.Count > 100 Then
CType(sender,BackgroundWorker).ReportProgress(0,items)
items = New List(Of ListViewItem)
End If
End If
Next
CType(sender,BackgroundWorker).ReportProgress(100,items)
End Sub
是否只是应该避免使用BackgroundWorker的情况,还是应该将当前的ListView Fullpath列列表传递给BackgroundWorker并检查是否存在重复项?
如果ListView中有30,000条记录,则大约为1.15MB,这似乎对于检查重复项而言会占用大量内存。