我正在从vb.net解析来自Outlook的电子邮件。主窗体显示所选Outlook文件夹的邮件总数,并允许我覆盖此编号,以便我可以处理1,10或全部。当我单击一个按钮时,我打开一个新表单,将ref传递给我的outlook mailClient类,以提供对邮件项的访问。表单new和show事件设置事物并在try / catch中调用异步函数,如此。
Try
AllEMails = Await ScanMailItems(ref_clsEmailClient.ECFMailToScan,progressIndicator, tokenSource.Token)
Catch ag As AggregateException
If ag.InnerExceptions IsNot Nothing Then
MsgBox(ag.InnerExceptions.Count.ToString)
For Each ex In ag.InnerExceptions
MsgBox(ex.Message)
Next
End If
Catch ex As Exception
MsgBox(ex.Message & vbNewLine & vbNewLine & _
ex.StackTrace)
End Try
在这个ScanMailItems()
我正在设置For Each Next来循环邮件项目。
Dim EmailsFraction As Integer = Await Task(Of Integer).Run(
Function()
For i = ECFMailItems.Count To 1 Step -1
'other code
Throw New Exception("Test Error 1")
UpdateFormDelegate()
counter += 1
Next
Return counter
End Function)
Return EmailsFraction
到目前为止的代码正在工作,并且在循环中我正在使用一些委托子更新控件来显示主题以及将在循环中解析的每封电子邮件的电子邮件正文。我的麻烦是我在for循环和委托子中放置了一些Throw New Exception("Test Error")
,以确保它们会在我显示的事件中传播回我的try / catch。他们没有,我尝试过AggregateException。我可以发布实际代码,但认为异常是如何通过异步任务传播的。
我正在学习这样做,有没有更好的方法来设置它?最重要的是,在For循环的每次迭代中,我的进度条和其他控件需要更新,我将调用其他类。