41

私は次のコードを持っています:

        public static void Send(this MailMessage email)
    {
        if (!isInitialized)
            Initialize(false);
        //smtpClient.SendAsync(email, "");
        email.IsBodyHtml = true;

        Thread mailThread = new Thread(new ParameterizedThreadStart(
            (o) => 
            {
                var m = o as MailMessage;

                SmtpClient client= new SmtpClient("smtpserveraddress");
                client.Send(m);

            }));
        mailThread.Start(email);

メインスレッドに干渉することなく、バックグラウンドでメール送信を行いたい。いつ終わってもかまいません。

作成されたスレッド(mailThread)の破棄をなんとかして処理する必要がありますか?それとも、仕事が終わったときに自動的に処分しますか?

SendAsyncメソッドはお勧めしません。手動でスレッドを作成したいのですが。Mail.Sendは単なるシナリオ例です。

ありがとうございました。

4

3 に答える 3

63

いいえ!

Threadオブジェクトを破棄する必要はありません(ところで、ThreadクラスはDisposeメソッドを提供しません)。

于 2012-05-22T08:07:11.080 に答える
13

スレッドは、そのルーチンが終了すると破棄されます。
ですから、いいえ、あなたはそれをする必要はありません、それは必要ではありません(私が思うに不可能です)。

于 2012-05-22T08:08:12.160 に答える
2

さて、あなたは'dSmtpClientでなければなりません。Dispose()生のスレッドを作成する代わりに、タスク並列ライブラリを使用します。

public static void Send(this MailMessage email)
{
    if (!isInitialized)
        Initialize(false);
    //smtpClient.SendAsync(email, "");
    email.IsBodyHtml = true;

    Task.Factory.StartNew(() =>
    {
        // Make sure your caller Dispose()'s the email it passes in at some point!
        using (SmtpClient client = new SmtpClient("smtpserveraddress"))
        {
            client.Send(email);
        }
    });
}
于 2014-01-12T21:43:39.143 に答える