Qual è la differenza tra delegatore e dispatcher?

5

Qual è la differenza tra delegatore e dispatcher?

Non sono abbastanza sicuro di entrambi i concetti.

    
posta texasbruce 19.10.2012 - 03:30
fonte

2 risposte

12

La delega assegna una responsabilità ad un altro oggetto. Ad esempio, se sono invitato a un incontro e lo assegno a un collega junior, lo sto delegando. Il punto da notare qui è che è il collega junior che parteciperà all'incontro e non c'è nessun intermediario tra lui e me.

L'invio non sta delegando. Dispatcher è più simile a un intermediario che inoltra una richiesta a qualcun altro. Per esempio, per partecipare all'incontro, il mio astuto collega junior potrebbe chiedere a una compagnia di taxi un ritiro e il tizio che riceve la richiesta potrebbe inviarlo a un tassista nelle vicinanze. Il punto qui è che il dispatcher sta solo seguendo la richiesta.

    
risposta data 19.10.2012 - 06:10
fonte
6

Dispatcher

  • Il dispatcher può essere considerato una Queue dove vengono inviati gli eventi.
  • Un dispatcher viene eseguito sul thread dell'interfaccia utente ed esegue eventi per l'interfaccia utente.
  • In Windows, i controlli dell'interfaccia utente possono essere modificati solo dal thread che li ha creati , quindi eventuali modifiche all'interfaccia utente devono essere eseguite dal thread dell'interfaccia utente, quindi questo è uno dei motivi principali per cui le operazioni che modifica gli elementi della finestra deve essere inviato al dispatcher dell'interfaccia utente.
  • Un thread in background che chiama BeginInvoke sul dispatcher restituirà immediatamente anche se il dispatcher potrebbe non aver ottenuto l'elaborazione . Se invece fosse stato usato Invoke, il thread in background si bloccava fino a quando il thread dell'interfaccia utente non ha completato l'elaborazione. Nota che in Silverlight non c'è Invoke sul Dispatcher e nella maggior parte dei casi probabilmente non vuoi bloccare il thread in background mentre il thread UI sta lavorando.

delegato

  • Il delegato viene utilizzato per Richiamata e Gestione eventi .
  • Il significato del dizionario di Delagate è "Una persona che agisce per un'altra persona". ma in .net è davvero un metodo che agisce per un altro metodo.
  • Il delegato utilizza thread di lavoro nel pool di thread.
  • Quando si utilizza il thread dell'interfaccia utente (o qualsiasi thread), è possibile chiamare BeginInvoke e Invoke su un delegato. BeginInvoke utilizzerà un thread di lavoro per chiamare il delegato utilizzando lo stesso metodo descritto in precedenza. Invoke, tuttavia, non userebbe un thread diverso. Avrebbe semplicemente richiamato il delegato in modo sincrono nel contesto del thread chiamante e restituito al termine.

Considera questo: delegate.Invoke/BeginInvoke e this.dispatcher.Invoke/BeginInvoke .

  • BeginInvoke significa: "Fai questo e torna prima che sia completato. A me non interessa il valore restituito o puoi richiamarmi a questo indirizzo a un certo punto in futuro".
  • Invoke significa: "Fai questo e mi siederò qui e attenderne il completamento."

In breve: The BeginInvoke is an asynchronous call. It executes a delegate asynchronously on the thread the Dispatcher is associated with.

    
risposta data 19.10.2012 - 06:11
fonte

Leggi altre domande sui tag