Cosa succede al controllo richiama la funzione?

0

Una domanda sui controlli del modulo richiama la funzione.
Control1 viene creato su thread1. Se si desidera aggiornare qualcosa in Control1 da thread2 devi fare qualcosa del tipo:

delegate void SetTextCallback(string txt);  

void setText(string txt)  
{  
  if (this.textBox1.InvokeRequired)  
  {  
     SetTextCallback d = new SetTextCallback(setText);  
     this.Invoke(d, new object[] { txt });  
  }  
  else  
  {   
     // this will run on thread1 even when called from thread2
     this.textBox1.AppendText(msg);  
  }  
}'  

Che cosa succede dietro le quinte qui?

Questo richiamo si comporta diversamente da un normale richiamo di oggetto. Quando si desidera chiamare una funzione in un oggetto su un thread specifico, quindi quel thread deve essere in attesa su qualche coda di delegati ed essere eseguito i delegati in arrivo.

È corretto che il controllo dei moduli di Windows invochi la funzione è completamente diverso dall'invocazione dell'oggetto standard Funzione?

    
posta user65909 23.09.2012 - 18:28
fonte

1 risposta

1

Per evitare problemi con i thread, molte operazioni di Windows Form devono essere eseguite sul thread dell'interfaccia utente. Invoke fornisce un modo semplice per ottenere ciò senza una gestione del thread esplicita.

Se sei curioso del funzionamento interno, vorrei scaricare uno strumento di decompilazione (credo che Telerik JustDecompile sia gratuito) e guardare System.Windows.Forms.Control.Invoke nella System.Windows.Forms DLL nel GAC.

A proposito, sembra che carichi un riferimento al thread dell'interfaccia utente e invochi il codice nel suo ambiente.

    
risposta data 23.09.2012 - 19:30
fonte

Leggi altre domande sui tag