Vb.net Net,无法捕获控件调用函数中的异常
下面的函数工作正常,在listview控件中获取文件夹列表(选中的listviewitems),然后将图像加载到缩略图控件中,我使用CancellationTokenSource取消该过程Vb.net Net,无法捕获控件调用函数中的异常,vb.net,listview,async-await,anonymous-function,Vb.net,Listview,Async Await,Anonymous Function,下面的函数工作正常,在listview控件中获取文件夹列表(选中的listviewitems),然后将图像加载到缩略图控件中,我使用CancellationTokenSource取消该过程 ` Public Shared Async Function LoadFilesFromLSVAsync(_lsi As ImageListView, _lsv As ListView) As Task(Of Boolean) CTS = New CancellationTokenSo
` Public Shared Async Function LoadFilesFromLSVAsync(_lsi As ImageListView, _lsv As ListView) As Task(Of Boolean)
CTS = New CancellationTokenSource
CT = CTS.Token
Dim _lamlsi = Async Function()
Try
For Each _fldr In _lstFolderPath
If CT.IsCancellationRequested Then Throw New Exception("user cancelled the process")
If My.Computer.FileSystem.DirectoryExists(_fldr) Then
For Each _file In _getfiles
'---> want to catch this Exception and show to User in msgbox
If CT.IsCancellationRequested Then Throw New Exception("user cancelled the process")
_cnt% += 1
Next
End If
Next
Catch ex As Exception
Utility.StatusUpdate.TexUpdate.UpdateText(_lblStatus, $"error : {Err.Description }")
Throw '---> THROW IS NOT THROW THE EXCEPTION
Finally
End Try
Return True
End Function
Return Await Task.Run(Async Function()
If _lsi.InvokeRequired Then
_lsi.Invoke(Async Function() Await _lamlsi())
Else
Await _lamlsi()
End If
Return True
End Function, CT)
End Function
` Private Sub btnCancelTask_Click(sender As Object, e As EventArgs) Handles btnCancelTask.Click
If Not IsNothing(CTS) Then
CTS.Cancel()
CTS.Dispose()
CTS = Nothing
End If
End Sub
取消进程
` Public Shared Async Function LoadFilesFromLSVAsync(_lsi As ImageListView, _lsv As ListView) As Task(Of Boolean)
CTS = New CancellationTokenSource
CT = CTS.Token
Dim _lamlsi = Async Function()
Try
For Each _fldr In _lstFolderPath
If CT.IsCancellationRequested Then Throw New Exception("user cancelled the process")
If My.Computer.FileSystem.DirectoryExists(_fldr) Then
For Each _file In _getfiles
'---> want to catch this Exception and show to User in msgbox
If CT.IsCancellationRequested Then Throw New Exception("user cancelled the process")
_cnt% += 1
Next
End If
Next
Catch ex As Exception
Utility.StatusUpdate.TexUpdate.UpdateText(_lblStatus, $"error : {Err.Description }")
Throw '---> THROW IS NOT THROW THE EXCEPTION
Finally
End Try
Return True
End Function
Return Await Task.Run(Async Function()
If _lsi.InvokeRequired Then
_lsi.Invoke(Async Function() Await _lamlsi())
Else
Await _lamlsi()
End If
Return True
End Function, CT)
End Function
` Private Sub btnCancelTask_Click(sender As Object, e As EventArgs) Handles btnCancelTask.Click
If Not IsNothing(CTS) Then
CTS.Cancel()
CTS.Dispose()
CTS = Nothing
End If
End Sub
我想在单击“取消”按钮后向用户显示“用户已取消流程”消息框,但在单击“取消”按钮后,流程停止,但我无法获得“用户已取消流程”异常。如果您想快速获得答案,我想您应该简化代码并放大问题。我们很难阅读并理解您的所有代码以提供答案。抱歉,我在发布之前已经简化了代码。代码中没有问题我希望捕获异常如果用户单击“取消”按钮,我将再次尝试简化冗长的代码。。thanks@ThomasCarlton,+1简化代码。如果您没有获得函数结果,那么您也看不到异常。