2012-11-23 14 views
7

Ho un'applicazione C# Windows Form con una barra di avanzamento. Voglio progredire in modo dinamico in base allo stato di alcuni metodi. Ho quel metodo in una classe separata e sto creando un nuovo thread per quel metodo, con un delegato per passare lo stato del metodo al thread principale.Il dispatcher non viene in C# Applicazione Windows Form

La stessa situazione sono in grado di risolvere in un'applicazione WPF utilizzando progressbar.Dispatcher ma in un'applicazione Windows Form non c'è Dispatcher, anche se io uso lo spazio dei nomi System.Threading.

progressbar.Dispatcher sembra essere disponibile solo in un'applicazione WPF.

risposta

11

In Winforms è possibile utilizzare ProgressBar.Invoke o ProgressBar.BeginInvoke per aggiornare il controllo da un altro thread.

5

In Windows Form l'applicazione BackgroundWorker dovrebbe adattarsi perfettamente al vostro compito. In particolare, ha il metodo ReportProgress per inviare l'avanzamento in base ai calcoli e ProgressChanged per tenere traccia delle modifiche dal thread dell'interfaccia utente. Vedere MSDN article per tutti i dettagli

4

In WinForms i metodi Invoke/BeginInvoke si trovano direttamente sugli oggetti di controllo come si può vedere dai documenti di System.Windows.Forms.Control. Quindi avresti progressBar.BeginInvoke(...) per esempio.

+1

's/WPF/Windows Forms /' – shambulator

+0

@shambulator: Grazie. – Tudor