我正在构建必须发送电子邮件的winforms应用程序。我希望能够调用SmtpClient.SendAsync方法,然后允许用户立即关闭应用程序(我不想在回调函数中发送结果)。如果用户停止申请,则不会发送电子邮件....如果应用程序保持运行,则会按预期发送电子邮件... 任何建议,我如何将所有相关细节传递给smtp服务器并关闭我的应用程序?
谢谢
答案 0 :(得分:3)
需要允许您的操作执行,直到完成向SMTP服务器的传递。如果您真的不关心结果,可以生成前台线程来执行传递。这样,如果用户关闭应用程序,其GUI将被卸载,但前台线程将持续直到操作完成。一旦属于该进程的所有前台线程终止,该进程本身也将终止。
var t = new Thread(new ThreadStart(() => smtpClient.Send(message)));
t.IsBackground = false;
t.Start();
编辑:正如CodeCaster所指出的,这种方法假设您的应用程序的进程将在用户关闭其窗口后继续运行。如果用户在线程完成之前关闭系统(或手动杀死进程),操作将失败。