Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
19.11.2013, 11:19
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка 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, 12:19
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка progressbar из отдельного потока |
|||
#18+
BRS_1 Код: c# 1. 2. 3.
Все правильно. Из МСДН : BeginInvoke(Delegate, Object[]) - Выполняет указанный делегат асинхронно с указанными аргументами в потоке, в котором был создан базовый дескриптор элемента управления. А тот поток занят вычислениями... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.11.2013, 12:36
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка progressbar из отдельного потока |
|||
#18+
Как тогда реализовать изменение прогрессбара? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.11.2013, 12:39
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка progressbar из отдельного потока |
|||
#18+
BRS_1, Изначально решение задачи неверно выбрано. Вы выполняете вычисление в UI-потоке, а управляете элементами управления из рабочих потоков. Сделайте наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.11.2013, 12:39
|
|||
---|---|---|---|
Не отображается отрисовка progressbar из отдельного потока |
|||
#18+
BRS_1Как тогда реализовать изменение прогрессбара? Делать вычисления в другом потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.11.2013, 13:02
|
|||
---|---|---|---|
Не отображается отрисовка progressbar из отдельного потока |
|||
#18+
BRS_1, Если вам не так важно вычисление данных в другом потоке - попробуйте Код: c# 1.
тынц В вашем случае порекомендую BackgroundWorker , на моей практике покрывал потребности до 70% простых задач, где требовалась отрисовка progressbar. А так да, вычисления нужно делать в другом потоке (не в UI) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.11.2013, 13:28
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка 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:59
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка 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, 14:11
|
|||
---|---|---|---|
Не отображается отрисовка progressbar из отдельного потока |
|||
#18+
BRS_1, Не вижу подписок на события bworkerа: backgroundWorker1_DoWork и backgroundWorker1_RunWorkerCompleted Попробуйте пример отсюда http://www.codeproject.com/Tips/83317/BackgroundWorker-and-ProgressBar-demo ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.11.2013, 14:44
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка 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, 16:52
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка 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" - не при чем :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.11.2013, 09:40
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка progressbar из отдельного потока |
|||
#18+
ну сейчас у тебя бегает бесцельная фигня, которая единственно отображает что у тебя поток запущен и ещё не завершился. а при использовании ReportProgress ты мог бы видеть сколько примерно циклов у тебя обработано. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.11.2013, 18:11
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка progressbar из отдельного потока |
|||
#18+
sldну сейчас у тебя бегает бесцельная фигня так и задумывалось ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.11.2013, 18:20
|
|||
---|---|---|---|
|
|||
Не отображается отрисовка 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.
Результат - работает ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&tablet=1&tid=1403656]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 190ms |
0 / 0 |