Диспетчер не подходит к приложению С# Windows Forms

У меня есть приложение C# Windows Forms с индикатором выполнения. Я хочу, чтобы это происходило динамически, основываясь на каком-то статусе метода. У меня есть этот метод в отдельном классе, и я создаю новый поток для этого метода с делегатом для передачи статуса метода родительскому потоку.

Ту же ситуацию я могу решить в приложении WPF, используя progressbar.Dispatcher, но в приложении Windows Forms нет Dispatcher, даже если я использую пространство имен System.Threading.

progressbar.Dispatcher кажется доступным только в приложении WPF.


person Kishor    schedule 23.11.2012    source источник


Ответы (3)


В winforms вы можете использовать ProgressBar.Invoke или ProgressBar.BeginInvoke для обновления элемента управления из другого потока.

person sam1589914    schedule 23.11.2012

В Windows Form приложение BackgroundWorker должно идеально подходить для вашей задачи. В частности, у него есть метод ReportProgress для отправки прогресса в зависимости от ваших вычислений и ProgressChanged для отслеживания изменений из потока пользовательского интерфейса. Подробнее см. в статье MSDN.

person Nogard    schedule 23.11.2012

В WinForms методы Invoke/BeginInvoke находятся непосредственно в объектах управления, как видно из документации System.Windows.Forms.Control. Например, у вас будет progressBar.BeginInvoke(...).

person Tudor    schedule 23.11.2012