2010-12-28 14 views
16

私のアプリがGmailに通知を送信できるように、Gmailのクラスを使用しています。スレッドは自動的に閉じますか?

そのは次のように行わ:だからSendMessageThreaded後、実行自体によってそれが近くにありませんか私は

しなければならないのさ

private static void SendMessageThreaded() 
{ 
    try 
    { 
     if (Notification.message != "") 
      RC.Gmail.GmailMessage.SendFromGmail("accname", "accpass", "email", "subject", Notification.message); 

     Notification.message = ""; 
    } 
    catch 
    { } 
} 

public static void SendMessage(string message) 
{ 
    Notification.message = message; 

    Thread t = new Thread(new ThreadStart(SendMessageThreaded)); 
    t.Start(); 
} 

と、このようなスレッド化機能の外観

t.Start() 
t.Abort() 

または何ですか?

答えて

25

スレッドは一度起動する必要があります。その時点で、スレッドは割り当てられたコードブロックを実行して終了します。

あなたは(あなたがたとえば、早期救済する場合を除き)、明示的に、ほとんどの場合、スレッドをクリーンアップする必要はありません

7

はい、スレッドは単独で閉じています。

これは、メソッドのすべての命令がsecodnスレッドで実行されたときです。

6

スレッドは範囲外になり、SendFromGmailが終了するとすぐにガベージコレクションに使用できます。

はい、自動的に終了します。

1

中止()メソッドは、あなたが扱うことができるThreadAbortExceptionをスロー:

public void SendMessageThreaded() 
{ 
    try 
    { 
     // thread logic 
    } 
    catch (ThreadAbortException tae) 
    { 
     // thread was aborted, by t.Abort() 
    } 
    catch (Exception ex) 
    { 
     // other error 
    } 
} 
あなたはアボート取り扱いを処理するのに役立ちます任意のオブジェクトを「送信」することができます

t.Abort(myObject) 

を使用することにより

ExceptionStateプロパティを使用して、そのオブジェクトにアクセスできます。

5

これはスレッドプールに戻って別のタスクを待っています。

+0

いいえ、これはプールスレッドではありません。それは再利用されません。 –

7

はい、間違いなく。終了時に自動的に閉じます。

1

はい、終了しますが、2番目のスレッドが待機している間にメインスレッドがクラッシュした場合は、ゾンビを避けるためにタイムアウトする必要があります。

関連する問題