我想在 session_start 中呼叫方法(發送郵件)。這是我的任務功能:
Public Shared Async Function SendEmailMessage(ByVal MailFrom As String, ByVal MailTo As String, ByVal Subject As String, ByVal HtmlMessage As String) As Task
Dim mail As MailMessage = New MailMessage
mail.From = New MailAddress(MailFrom)
mail.To.Add(MailTo)
mail.Subject = Subject
mail.Body = HtmlMessage
Dim smtp As SmtpClient = New SmtpClient("smtpclient")
smtp.Port = 587
smtp.DeliveryMethod = SmtpDeliveryMethod.Network
smtp.UseDefaultCredentials = True
Await Task.Run(Function() smtp.SendMailAsync(mail))
'Await result
End Function
在 global.asax 我有這個代碼:
Public Overrides Sub Init()
MyBase.Init()
Dim wrapper = New EventHandlerTaskAsyncHelper(AsyncSessionStart)
Me.AddOnAcquireRequestStateAsync(wrapper.BeginEventHandler, wrapper.EndEventHandler)
End Sub
Private Async Function AsyncSessionStart() As Task
If Not Session.IsNewSession Then Return
Await funzioni.SendEmailMessage("***@***.**", "*****@***", "Object text",
String.Format("E' stato effettuato un tentativo di accesso da {0} del {1} alla WebApp.",
Session("name"), Session("office")))
End Function
這是我已閱讀并遵循asx-net-async-global-asax的參考文本
但是,visual studio 在這部分代碼中給了我以下錯誤:
Dim wrapper = New EventHandlerTaskAsyncHelper(AsyncSessionStart)
Task 型別的值無法轉換為 TaskEventHandler。
我哪里錯了?
uj5u.com熱心網友回復:
未經測驗,我相信這一點:
Private Async Function AsyncSessionStart() As Task
應該是這樣的:
Private Async Sub AsyncSessionStart(sender As Object, e As EventArgs)
您指定給EventHandlerTaskAsyncHelper建構式的方法應該是異步事件處理程式,這意味著使用標準事件處理程式引數(您發布的鏈接執行但您忽略了)并將其宣告為Async Sub.
您還必須使用AddressOf運算子在 VB 中創建委托。您可能還必須明確指定委托型別:
Dim wrapper = New EventHandlerTaskAsyncHelper(AddressOf AsyncSessionStart)
或者:
Dim wrapper = New EventHandlerTaskAsyncHelper(New TaskEventHandler(AddressOf AsyncSessionStart))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483044.html
上一篇:.NetApi無法識別我的控制器
