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

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

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

Добрый всем день. Есть класс, который выполняет некую работу:
Листинг программы
  1. public class MyNew : IMyNew
  2. {
  3. private bool Initialize()
  4. {
  5. this.InitializeProgressDialog();
  6. return true;
  7. }
  8. private void InitializeProgressDialog()
  9. {
  10. this.statusDialog = new ProgressBar();
  11. this.statusDialog.setProgressBarLimit(this.renderCount);
  12. this.statusDialog.Show();
  13. }
  14. private void CreateControls()
  15. {
  16. this.statusDialog.updateStatus("Creating Movie Controls", true);
  17. }
  18. private void CreateView()
  19. {
  20. this.statusDialog.updateStatus("Rendering Starting View", false);
  21. }
  22. private void CreateStandardViews()
  23. {
  24. int[] array;
  25. array = new int[]
  26. {
  27. 7,
  28. 1,
  29. 4,
  30. 2,
  31. 3,
  32. 1,
  33. 5,
  34. 6,
  35. 9,
  36. 8
  37. };
  38. string[] array2 = new string[array.Length];
  39. for (int i = 0; i < array.Length; i++)
  40. {
  41. this.statusDialog.updateStatus(string.Concat(new object[]
  42. {
  43. "Rendering Standard Views: ",
  44. i + 1,
  45. " of ",
  46. array.Length
  47. }), true);
  48. }
ну и так далее. Т.е. в прогресс форму (создал визуально, накидал на форму компонентов) передаю как значение лейбла так и параметры прогрессбара
Листинг программы
  1. public partial class ProgressBar : Form
  2. {
  3. MyNew Breack;
  4. public void setProgressBarLimit(int frameCount)
  5. {
  6. this.progressBarStatus.Maximum = frameCount + 2;
  7. }
  8. public void updateStatus(string statusText, bool updateBar)
  9. {
  10. if (updateBar)
  11. {
  12. if (this.progressBarStatus.Value < this.progressBarStatus.Maximum)
  13. {
  14. this.progressBarStatus.Value++;
  15. }
  16. this.progressBarStatus.Update();
  17. }
  18. if (statusText != "")
  19. {
  20. this.labelSatus.Text = statusText;
  21. }
  22. this.labelSatus.Update();
  23. }
  24. public ProgressBar()
  25. {
  26. InitializeComponent();
  27. }
Эта прогрессбар форма виснет. Может ли кто подсказать КАК сделать всё красиво)))? Т.е. чтоб форма могла таскаться по монитору + чтоб я туда кнопку отмены добавил (добавить то добавил, только вот нажать её не удается из-за приоритетов). Правильно ли использовать потоки или всё же backgroundWorker?
Дело в том, что свой класс я тоже вызываю из другого класса. Т.е. схема такая Класс1->MyNew->Progressbar Если вызывать класс MyNew в новом потоке, то форма progressbar вообще не отобразится. Как запихнуть в progressbar непосредственно

backgroundWorker

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

updateStatus

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

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

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

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

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

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


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

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

11   голосов , оценка 4.364 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы