martedì 19 luglio 2011

C# Ricondurre l'esecuzione di un metodo al Main Thread dell'istanza Gui

Capita che lavorando su applicazioni che sfruttano il Multithreading si rende necessario ricondurre il thread nel quale si effettua un operazione al mainThread per pubblicare il valore nel controllo della Gui. Questo perchè sotto Microsoft Windows tutta la Gui gira su quello che viene definito il Main Thread dell'applicazione.

Normalmente si deve ricorrere alla scrittura di un pattern apposito. Con l'introduzione dei Delegate anonimi la problematica si risolve con una sola riga di codice.

Nell'esempio sottostante, viene lanciata la richiesta di una preview in stampa ad un thread secondario che si
preoccuperà di effettuare opportune operazioni per poi mandare a video il risultato.

// metodo utilizzato dal thread secondario. Si dovrà ricondurre la preview del report al main thread
public void PublishReport() 
{
    ReportSchedaCliente rpt = new ReportSchedaCliente(argo);
    if (!rpt.IsDataSourceEmpty())
    {   
       this.Invoke(new MethodInvoker(delegate(){ rpt.Preview(); }));
    }
}

0 commenti:

Posta un commento