ProgressBar от внешнего процесса

Прошу помощи в решении следующих вопросов:

  1. как прикрутить прогресс бар к внешнему процессу, например процессу, в котором происходит обработка списка элементов из базы данных, и как сделать так чтоб в этом процессе вызвался ProgressBar и без нажатия каких либо кнопок в форме (см. второй вопрос) по мере обработки элементов в прогрессбаре показывалось бы состояние обработки? (то есть ProgressBar.Value изменяется внешним процессом/потоком)
  2. можно ли ProgressBar вызвать без создания формы?
  3. если процессов (циклов в процессе) обработки несколько, как в форме изменять количество прогрессбаров и привязывать к разным циклам обработки?

Вот пример кода основного процесса.

public class Counter
{
    public static int Value = 0;
    static void Main(string[] args)
    {
        int max = 100;
        int value = 0;

        Task.Run(() =>
        {
            Form1 form = new Form1(max);
            form.ShowDialog();
        });

        while (value < max)
        {
            value++;
            Value = value;
            Console.WriteLine(value.ToString());
            Thread.Sleep(50);
        }

    }

}

Вот код формы:

public partial class Form1 : Form
{
    public Form1(int max)
    {
        InitializeComponent();
        progressBar.Maximum = max;
        Thread thread = new Thread(Process);
        thread.Start();
    }

    void Process()
    {
        if (InvokeRequired)
        {
            BeginInvoke((Action)Process);
        }
        else
        {
            while (progressBar.Value < Counter.Value)
            progressBar.Value = Counter.Value;
        }
    }
}

как вы понимаете это не работает


Ответы (0 шт):