2009-06-03 19 views
5

Ciao sto sviluppando un'applicazione .NET e voglio raggiungere i seguenti obiettivi:Chiamata di un Windows Form da un altro thread (Net)

Ho un'applicazione WinForms, e un timer (System.Timers.Timer) che esegue un thread basato su un programma. Il problema è che non riesco ad accedere all'interfaccia utente (modulo di Windows) dal thread secondario (WorkerThread), l'errore dice che qualcosa come il componente non è accessibile da un thread che non lo ha creato.

Esiste un modo per raggiungere questo obiettivo?

Grazie!

risposta

10
formObject.Invoke(delegate { 
     // action to perform on UI thread 
}); 
+2

E si noti che questo lavoro viene sostanzialmente aggiunto a una coda di lavoro per il thread dell'interfaccia utente che alla fine lo eseguirà quando ha tempo. –

2

Diciamo che il metodo dei lavoratori (che si esegue in un thread) è

DoWork(args) 
{ 
    ... 
    UpdateUI(); 
} 

il metodo che gestisce evento trascorso timer dovrebbe fare questo:

OnTimerElapsed(object sender, ElapsedEventArgs e) 
{ 
    args = GetArgs(); 
    this.BeginInvoke(() => DoWork(args)); 
    // 'this' refers to form here. 
    // You can also use BeginInvoke on a user control for updating it. 
} 

Questo verrà eseguito DoWork in un thread separato e DoWork avrà la capacità di aggiornare l'interfaccia utente.

Problemi correlati