Вместо этого я хочу иметь возможность обновлять свою базу данных, но у меня нет доступа к dbContext из статического метода обратного вызова. Я попытался передать dbContext в объект обратного вызова, но он был удален при выполнении обратного вызова.
Код: Выделить всё
SmtpClient client = new SmtpClient(Server, Port);
client.EnableSsl = this.SendTls;
//--------------------------------
// Create credentials
//--------------------------------
System.Net.NetworkCredential cs = new System.Net.NetworkCredential(User, Password);
client.Credentials = cs;
//----------------------------------------------------------------------------------
// Before we send, lets write the email log so we will have an ID of the message...
//----------------------------------------------------------------------------------
int id = EmailHistory.WriteEmailLog(db, DateTime.UtcNow, mm.To, mm.From, mm.Subject, mm.Body, mm.CC, mm.Bcc, mm.ReplyToList, false);
//-------------------------
// Now send the email async with postback
//-------------------------
client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
string fileName = FileHelper.GetTempFileName(_ctx, "Error", "txt");
CallBackObject cbo = new CallBackObject(mm, db, fileName, id);
client.SendAsync(mm, cbo);
public class CallBackObject
{
public MailMessage mm;
public dbContext db;
public string fileName;
public int mailLogId;
public CallBackObject(MailMessage _mm, dbContext _db, string _fileName, int id)
{
mm = _mm;
db = _db;
fileName = _fileName;
mailLogId = id;
}
}
//--------------------------------------------------------------
// Come here when the send completes. Clean up any attachments
//--------------------------------------------------------------
static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
CallBackObject cbo = (CallBackObject)e.UserState;
//------------------------------------------------------
// User state is the mail message that orifinalted it
//------------------------------------------------------
MailMessage mm = cbo.mm;
//dbContext db = new dbContext();
//------------------------------------------------------
// Now clean up any attachments by deleting temp files.
//------------------------------------------------------
if (mm.Attachments != null)
{
foreach (Attachment f in mm.Attachments)
{
f.Dispose();
FileHelper.DeleteTempFile(f.Name);
}
}
if (e.Error != null)
{
FileHelper.WriteTextFile(cbo.fileName, $"Email Error:
{e.Error.Message}\nTo:{mm.To}\n{mm.Subject}\nInner
Exception:{e.Error.InnerException}\nStack:
{e.Error.StackTrace}\nSource:{e.Error.Source}");
Подробнее здесь: https://stackoverflow.com/questions/784 ... tic-method