我需要使用的参数是什么?e As AsyncCompletedEventArgs"

时间:2017-05-18 13:36:21

标签: vb.net asynchronous

我接管了一个项目,在发送电子邮件后,应该记录详细信息以及电子邮件发送是否成功。

但是,我注意到永远不会调用记录数据的子例程。所以,我试图把它包含在电子邮件发送代码的底部,如此

Smtp_Server.Send(e_mail) ' Here, Smtp_Server is System.Net.Mail.SmtpClient
                         ' e_mail is System.Net.Mail.MailMessage

sendComplete(Me, New AsyncCompletedEventArgs)   ' This is the call for the log subroutine

但是,底线给出错误:

  

' Public Sub New()'已过时:'此API支持.NET框架基础结构,不能直接在您的代码中使用

这是sendComplete子程序的开始。

Public Sub sendComplete(ByVal sender As Object, e As AsyncCompletedEventArgs)

Try
   If e.Error IsNot Nothing Then
      PictureBox1.Visible = False
      MsgBox("Failed to send email!", MessageBoxIcon.Warning + MsgBoxStyle.OkOnly, "Error")
      mailSent = True

我需要在第二个参数中添加什么才能使代码调用子程序?或者sendComplete子程序本身是否需要改变?

修改

按照建议将以下Try...Catch语句添加到代码后,代码执行正常并且没有点击Catch,但是,在发送消息后,不会转到sendComplete子例程。

Smtp_Server.UseDefaultCredentials = False
Smtp_Server.Credentials = New Net.NetworkCredential(senderAdd, senderPass)
Smtp_Server.EnableSsl = False
Smtp_Server.Host = SMTPserver

Try
   AddHandler Smtp_Server.SendCompleted, AddressOf sendComplete
Catch ex As Exception
   silentErrorLog(ex)
End Try

1 个答案:

答案 0 :(得分:1)

自己遇到类似的问题后,@ ChrisDunaway的评论实际证明非常有帮助。我的电子邮件失败但我不确定原因,所以添加异步调用帮助我检测原因。

在您的代码中,您需要拥有AddHandler,就像您在示例中所写的那样:

Try
    AddHandler Smtp_Server.SendCompleted, AddressOf sendComplete
Catch ex As Exception
    silentErrorLog(ex)
End Try

然后,你缺少的那部分,你需要提出一些

的内容
Dim userState As Object = e_mail
Smtp_Server.SendAsync(e_mail, userState)

这样,您的sendComplete子例程会检查e_mail是否有任何问题,并且可以完成代码的If e.Error IsNot Nothing部分。

有关详细信息,请参阅this site