SmtpClient.SendAsync - 调用后停止应用
SmtpClient.SendAsync - Stop application after the call
我正在构建必须发送电子邮件的 winforms 应用程序。我希望能够调用 SmtpClient.SendAsync 方法,然后允许用户立即关闭应用程序(我对在回调函数中发送结果不感兴趣)。如果用户停止应用程序,则不会发送电子邮件....如果应用程序保持 运行,则电子邮件会按预期发送...
任何建议,我如何将所有相关详细信息传递到 smtp 服务器并关闭我的应用程序?
谢谢
您的操作需要被允许执行,直到发送到 SMTP 服务器完成。如果您真的不关心结果,您可以生成一个前台线程来执行交付。这样,如果用户关闭应用程序,其 GUI 将被卸载,但前台线程将持续存在直到操作完成。一旦属于进程的所有前台线程都终止,进程本身也将终止。
var t = new Thread(new ThreadStart(() => smtpClient.Send(message)));
t.IsBackground = false;
t.Start();
Edit:正如 CodeCaster 所指出的,此方法假定您的应用程序进程在用户关闭其 windows 后将保持 运行。如果用户在线程完成之前关闭系统(或手动终止进程),操作将失败。
我正在构建必须发送电子邮件的 winforms 应用程序。我希望能够调用 SmtpClient.SendAsync 方法,然后允许用户立即关闭应用程序(我对在回调函数中发送结果不感兴趣)。如果用户停止应用程序,则不会发送电子邮件....如果应用程序保持 运行,则电子邮件会按预期发送... 任何建议,我如何将所有相关详细信息传递到 smtp 服务器并关闭我的应用程序?
谢谢
您的操作需要被允许执行,直到发送到 SMTP 服务器完成。如果您真的不关心结果,您可以生成一个前台线程来执行交付。这样,如果用户关闭应用程序,其 GUI 将被卸载,但前台线程将持续存在直到操作完成。一旦属于进程的所有前台线程都终止,进程本身也将终止。
var t = new Thread(new ThreadStart(() => smtpClient.Send(message)));
t.IsBackground = false;
t.Start();
Edit:正如 CodeCaster 所指出的,此方法假定您的应用程序进程在用户关闭其 windows 后将保持 运行。如果用户在线程完成之前关闭系统(或手动终止进程),操作将失败。