|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
Подскажите пожалуйста. Немогу разобраться, почему не отображается отрисовка прогрессбара из отдельного потока. Странно, но метод "updadeBar" получает управление только в самом конце - когда уже отработает цикл эмуляции вычислений. Framework 4 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 11:19 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
BRS_1 Код: c# 1. 2. 3.
Все правильно. Из МСДН : BeginInvoke(Delegate, Object[]) - Выполняет указанный делегат асинхронно с указанными аргументами в потоке, в котором был создан базовый дескриптор элемента управления. А тот поток занят вычислениями... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 12:19 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
Как тогда реализовать изменение прогрессбара? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 12:36 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
BRS_1, Изначально решение задачи неверно выбрано. Вы выполняете вычисление в UI-потоке, а управляете элементами управления из рабочих потоков. Сделайте наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 12:39 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
BRS_1Как тогда реализовать изменение прогрессбара? Делать вычисления в другом потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 12:39 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
BRS_1, Если вам не так важно вычисление данных в другом потоке - попробуйте Код: c# 1.
тынц В вашем случае порекомендую BackgroundWorker , на моей практике покрывал потребности до 70% простых задач, где требовалась отрисовка progressbar. А так да, вычисления нужно делать в другом потоке (не в UI) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 13:02 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
[quot Pallaris]BRS_1Как тогда реализовать изменение прогрессбара? Не вопрос. Вопрос - как узнать, что вычисления вычислились (что бы отключить прогрессбар)? Попытка №1 (через событие) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
Результат - прогресс бар крутится пока не сработает событие и вот тогда получаю ошибку - Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'progbar' не из того потока, в котором он был создан. Попытка №2 (через блокировку) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Результат - прогресс бар не отображается, с таким же успехом можно было вместо вызова метода "ZZZ" вызвать th_new.Join(); ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 13:28 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
LameUserBRS_1, Если вам не так важно вычисление данных в другом потоке - попробуйте Код: c# 1.
тынц В вашем случае порекомендую BackgroundWorker , на моей практике покрывал потребности до 70% простых задач, где требовалась отрисовка progressbar. А так да, вычисления нужно делать в другом потоке (не в UI) Попытка №3 с backgroundworker Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Результат - прогресс бар не отображается. Скорее всего потому, что я не вызываю "ReportProgress" Вызывать его неоткуда, т.к. на самом деле никаких циклов в моих вычисления нет, вместо цикла Код: c# 1.
вызывается метод из другой подключенной бибилиотеки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 13:59 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
BRS_1, Не вижу подписок на события bworkerа: backgroundWorker1_DoWork и backgroundWorker1_RunWorkerCompleted Попробуйте пример отсюда http://www.codeproject.com/Tips/83317/BackgroundWorker-and-ProgressBar-demo ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 14:11 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
LameUserBRS_1, Не вижу подписок на события bworkerа: backgroundWorker1_DoWork и backgroundWorker1_RunWorkerCompleted Попробуйте пример отсюда http://www.codeproject.com/Tips/83317/BackgroundWorker-and-ProgressBar-demo Подписки есть, они в файле *.Designer.cs Код: c# 1. 2. 3. 4. 5. 6. 7.
За пример благодарю, мой код по смыслу такой же. Разве что Код: c# 1.
мне вызывать на самом деле неоткуда. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 14:44 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
Опечатка была в коде обработчика button5_Click (progbar.Style = ProgressBarStyle.Blocks) правильный код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Прогрессбар отображается, всем откликнувшимся благодрности! ПН. "ReportProgress" - не при чем :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 16:52 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
ну сейчас у тебя бегает бесцельная фигня, которая единственно отображает что у тебя поток запущен и ещё не завершился. а при использовании ReportProgress ты мог бы видеть сколько примерно циклов у тебя обработано. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 09:40 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
sldну сейчас у тебя бегает бесцельная фигня так и задумывалось ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 18:11 |
|
Не отображается отрисовка progressbar из отдельного потока
|
|||
---|---|---|---|
#18+
подсказали еще способ, можно обойтись без BackgroundWorker может кому пригодится: Попытка №4 (с блекджеком потоками и Invoke) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Результат - работает ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2013, 18:20 |
|
|
start [/forum/topic.php?fid=20&msg=38470813&tid=1403656]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 337ms |
total: | 488ms |
0 / 0 |