2010-06-21 203 views
1

在下面的代碼SendAsync失敗的原因是什麼?

public static void Send(SmtpClient smtpClient, MailMessage email) 
{ 
    try 
    { 
     smtpClient.SendCompleted += (sender, e) => 
     { 
      var x = e.Error; // can't access discarded object 
     }; 
     smtpClient.SendAsync(email, null); 
    } 
    catch // never reach 
    { 
     // this works 
     smtpClient.Send(email); 
    } 
} 
+1

你在處理SendCompleted事件嗎?它是否曾被錯誤響應調用過? – 2010-06-21 19:09:15

+0

我剛剛意識到有這個事件,e.Error'說我不能訪問被丟棄的對象......我該如何解決它? – BrunoLM 2010-06-21 19:27:09

回答

2

你smtpClient對象已被釋放或發送呼叫已經完成之後,但定稿前可以運行異步發送方法。嘗試移動傳遞給Send方法的變量的作用域,以使其持續通過異步執行。

另一個問題是一次只能執行一個SendAsync調用。您必須實現自己的等待隊列,以便可靠地使用SendAsync,否則會引發InvalidOperationException。

0

您的郵件可以被識別爲垃圾郵件。檢查您的垃圾郵件文件夾

+0

已經做了上千次 – BrunoLM 2010-06-21 19:04:40

-1

不知道這一點 - 但要儘量傳遞null以外的東西在userToken

smtpClient.SendAsync(email, "test"); 
相關問題