Изменение значения ProgressBar на C# WPF

494
07 февраля 2017, 18:37

У меня есть приложение на wpf, которое достаточно долго пингует ряд ip-шников. Захотелось установить ProgressBar. Напрямую (Как в Windows Forms - изменяя счетчик) - не работает.

Нагуглила, что это частая проблема. Нашла два решения:

  1. Наиболее частое и популярное с BackgroundWorker (stackoverflow). Решение не поняла и применить не смогла, т.к. не смогла засунуть свою функциональность в DoWork.
  2. Решение с делегатами (Habr, CodeProject). Такой метод у меня полностью заработал и все хорошо.

Очень хочу понять смысл того, что мы делаем в примененном мною способе. Читаю про делегаты, но не могу понять, зачем мы тут их используем.

Прошу пояснить механику работы второго варианта и причину его меньшей популярности (оптимизация?).

Спасибо!

P.S. Я абсолютный новичок в C#.

Answer 1

Можно завести потоки или как вариант использовать invoke. К примеру, в коде формы будет что то в духе

public void ProgressBarHandler(int value){
... пингуем машины
 progressBar.Value +=value;
}

и вызываешь

MainForm.Dispather.Invoke(new ThreadStart(delegate(MainForm.ProgressBarHandler(1);}));
READ ALSO
Наследование generic-класса от интерфейса

Наследование generic-класса от интерфейса

У меня есть классы и интерфейсы:

487
Символ юникода для имени хоста

Символ юникода для имени хоста

Могу ли я каким то образом, запустив httpListener по префиксу "http://+:8080", после этого послать на него запрос? Или же символы юникода нельзя использовать...

478
Скопировать часть байтов из файла c#

Скопировать часть байтов из файла c#

Есть файл 3exe, в котором записаны еще 2 файла : 1

494