Форма с progressbar: Что оптимальнее - поток или backgroundWorker - C#

Узнай цену своей работы

Формулировка задачи:

Добрый всем день. Есть класс, который выполняет некую работу:
public  class MyNew : IMyNew
    {
                     private bool Initialize()
             {
                        this.InitializeProgressDialog();
            return true;
             }
                     private void InitializeProgressDialog()
            {
                        this.statusDialog = new ProgressBar();
                        this.statusDialog.setProgressBarLimit(this.renderCount);
                         this.statusDialog.Show();
            }
 
             private void CreateControls()
            {
                        this.statusDialog.updateStatus("Creating Movie Controls", true);
                    }
                    private void CreateView()
                {
                        this.statusDialog.updateStatus("Rendering Starting View", false);
                    }
                    private void CreateStandardViews()
           {
            int[] array;
                array = new int[]
                {
                    7,
                    1,
                    4,
                    2,
                    3,
                    1,
                    5,
                    6,
                    9,
                    8
                };
 
            string[] array2 = new string[array.Length];
            for (int i = 0; i < array.Length; i++)
            {
                this.statusDialog.updateStatus(string.Concat(new object[]
                {
                    "Rendering Standard Views: ",
                    i + 1,
                    " of ",
                    array.Length
                }), true);
}
ну и так далее. Т.е. в прогресс форму (создал визуально, накидал на форму компонентов) передаю как значение лейбла так и параметры прогрессбара
public partial class ProgressBar : Form
    {
        MyNew Breack;
        public void setProgressBarLimit(int frameCount)
        {
            this.progressBarStatus.Maximum = frameCount + 2;
        }
        public void updateStatus(string statusText, bool updateBar)
        {
            if (updateBar)
            {
                if (this.progressBarStatus.Value < this.progressBarStatus.Maximum)
                {
                    this.progressBarStatus.Value++;
                }
                this.progressBarStatus.Update();
            }
            if (statusText != "")
            {
                this.labelSatus.Text = statusText;
            }
            this.labelSatus.Update();
        }
        public ProgressBar()
        {
            InitializeComponent();
        }
Эта прогрессбар форма виснет. Может ли кто подсказать КАК сделать всё красиво)))? Т.е. чтоб форма могла таскаться по монитору + чтоб я туда кнопку отмены добавил (добавить то добавил, только вот нажать её не удается из-за приоритетов). Правильно ли использовать потоки или всё же backgroundWorker?
Дело в том, что свой класс я тоже вызываю из другого класса. Т.е. схема такая Класс1->MyNew->Progressbar Если вызывать класс MyNew в новом потоке, то форма progressbar вообще не отобразится. Как запихнуть в progressbar непосредственно

backgroundWorker

тоже не пойму, ведь для обновления формы я использую не что-то выполняющееся в DoWork а функцию с параметрами

updateStatus

и там она уже решает КАК обновлять прогрессбар на форме. Может вообще не тем путем пошел?
Или может иак: вызвать создание формы с прогрессбаром в моём классе, вызвать класс MyNew в отдельном потоке и из него передавать переменные в основной класс и вызывать обновления прогрессбар формы?

Добавлено со слов ТС

... помимо окна есть куча кода. Я же не разрабатываю что то визуальное. Форма, прогрессбар, лейбл - это всё уже есть. Мне же нужно связывание событий, которые происходят в классе с этой формой. И я не могу с этим разобраться. Т.е. передача переменных и параметров из класса (отдельный файл *.cs) в форму, будь то threads, events, backgroundworker, или ещё что. Наверняка есть куча методов, но я с этим сталкиваюсь впервые. Меня интересуют технологии передачи а не что-то визуальное. Кто-нибудь что-нибудь подскажет?? Спасибо.

Решение задачи: «Форма с progressbar: Что оптимальнее - поток или backgroundWorker»

textual
Листинг программы
for (int i = 0; i < array.Length; i++)
            {
                ((BackgroundWorker)sender).ReportProgress(10 + i);
                        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы