2010-12-28 25 views
16

Im uso una classe gmail in modo che la mia app possa inviarmi notifiche su gmail.Un thread si chiude automaticamente?

il suo fare in questo modo:

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

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

e l'aspetto funzione filettato in questo modo:

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

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

Così, dopo SendMessageThreaded è gestito, lo fa vicino da solo o devo

t.Start() 
t.Abort() 

o qualcosa del genere?

risposta

25

Il thread deve essere avviato una volta, a quel punto eseguirà il blocco di codice assegnato e uscirà.

Non è necessario pulire in modo esplicito il filo nella maggior parte dei casi (a meno che non si desidera salvare presto per esempio)

7

Sì, il thread è chiuso da solo.

Ecco quando sono state chiamate tutte le istruzioni nel metodo eseguito sul thread di secodn.

6

Il thread uscirà dall'ambito ed è disponibile per la raccolta dei dati obsoleti non appena SendFromGmail termina.

Quindi sì, si chiude automaticamente.

1

The Abort() metodo genera ThreadAbortException che è possibile gestire:

public void SendMessageThreaded() 
{ 
    try 
    { 
     // thread logic 
    } 
    catch (ThreadAbortException tae) 
    { 
     // thread was aborted, by t.Abort() 
    } 
    catch (Exception ex) 
    { 
     // other error 
    } 
} 

utilizzando

t.Abort(myObject) 

si può "trasmettere" qualsiasi oggetto che permette di gestire la movimentazione di interruzione. È possibile utilizzare la proprietà ExceptionState per accedere a tale oggetto.

5

Non ce n'è bisogno, ritorna al pool di thread e attende altre attività, se nessuna si uccide.

+0

No, questa non è una discussione Pool. Non sarà riutilizzato. –

7

sì, sicuramente. si chiuderà quando finisce.

1

Sì, si chiuderà, ma è necessario un timeout per evitare comunque gli zombi se il thread principale si arresta mentre il secondo thread lo sta aspettando.

Problemi correlati