|
окно ожидания
|
|||
---|---|---|---|
#18+
Ситуация простая: нужно вызвать диалоговое окно, пока что-то выполянется в другом потоке. Причем сделать это так, чтобы было очень удобно использовать. С backgroundWorker что-то решения мне не понравились, но нашел вот такой способ: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Если честно напрягает использование Dispatcher.PushFrame, могут тут быть подводные камни? Спасибо за подсказку) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 11:19 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
netivanЕсли честно напрягает использование Dispatcher.PushFrame, могут тут быть подводные камни? Спасибо за подсказку)Идея использовать Task - правильная. У меня была раньше реализация через PushFrame, не понравилась. В итоге понравилась такая постановка задачи: Код: c# 1. 2. 3. 4. 5. 6.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 12:36 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей К, не поверишь, именно от тебя ждал ответа. Чем не понравился frame? Можешь пример использования вашего велосипеда скинутЬ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:10 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
netivanне поверишь, именно от тебя ждал ответа.Неожиданно. :-) netivanЧем не понравился frame?Я наверное по другому сформулирую. Через frame решение вполне рабочее, но с предлагаемым решением работать удобнее , если асинхронности базируются на тасках. Боюсь, я точно сейчас не смогу сформулировать недостатки. Нужно вспоминать, писать примеры. :-) Тут вообще возможны два способа индикации выполняемой фоновой задачи: 1. Обсуждаемый случай - диалогом. Применяется, если нужно блокировать UI на время выполнения фоновой операции. 2. Индикация без блокирования UI. Можно сделать какой-нибудь анимацией в статусбаре главной формы, или ещё как. Одно из преимуществ - для обоих случаев применяется одинаковый подход. netivanМожешь пример использования вашего велосипеда скинутЬ?Первый фрагмент кода и есть пример использования. Если там что-то непонятно - уточните вопрос, я поясню. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:23 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Ещё желательно сделать отображение диалога с задержкой (где-то в 0.5 секунды), чтобы для коротких тасков диалог не мелькал на экране. Но это уже следующий шаг. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:25 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей К, гавнокод. Нужно декларативно через mvvm. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:26 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Можно и так сформулировать - при использовании тасков в PushFrame нет необходимости. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:28 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
МСУгавнокод.Ну можно же подобрать другое слово. У нас же вроде мараторий на фекальные формулировки. :-) МСУНужно декларативно через mvvm.Конечно. Но это уже следующий этап. Аспнетчикам не понять. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:33 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей КНу можно же подобрать другое слово. Ок. "кодкоторыйнихеранекоррелируетскачествомиэргономикой" :) Алексей ККонечно. Всё должно само замлиться и декларативно подтягиваться :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:35 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей К, можно про AddRef и Release подробнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:37 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
netivanАлексей К, можно про AddRef и Release подробнее. Ну а что тут подробнее, утечка на утечке и утечкой погоняет ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:40 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
netivanАлексей К, можно про AddRef и Release подробнее. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:48 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
МСУnetivanАлексей К, можно про AddRef и Release подробнее. Ну а что тут подробнее, утечка на утечке и утечкой погоняет Тебя SeVa что ли укусил? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:48 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
netivanАлексей К, можно про AddRef и Release подробнее.Это надо на случай, когда одновременно выполняются несколько тасков. Мы же не будем для них показывать несколько диалогов "Подождите". :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:50 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей КnetivanАлексей К, можно про AddRef и Release подробнее.Это надо на случай, когда одновременно выполняются несколько тасков. Мы же не будем для них показывать несколько диалогов "Подождите". :-) ага, только ща понял. Спасибо! Только у меня все же пока что 1 Таск планируется. Сейчас попробую с вашим примером) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 13:53 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей К, сколько же опасного кода :) Окно ожидания в вебе с блокировкой UI: Код: javascript 1.
Делов-то . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 14:03 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
МСУАлексей К, сколько же опасного кода :) Окно ожидания в вебе с блокировкой UI: Код: javascript 1.
Делов-то . Вообще-то мы обсуждаем реализацию. Прикладной код проще некуда. Давай я его ещё раз повторю, для верности. :-) Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 14:21 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
netivanАлексей Кпропущено... Это надо на случай, когда одновременно выполняются несколько тасков. Мы же не будем для них показывать несколько диалогов "Подождите". :-) ага, только ща понял. Спасибо! Только у меня все же пока что 1 Таск планируется. Сейчас попробую с вашим примером)Ещё обрати внимание на ContinueWithSync. Это ContinueWith через шедулер, привязанный к контексту синхронизации главного UI-потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 14:27 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей КВообще-то мы обсуждаем реализацию. Прикладной код проще некуда. Давай я его ещё раз повторю, для верности. :-) Всё-равно, пока еще не знаю, но что-то мне не нравится в этом коде :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 14:30 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
МСУАлексей КВообще-то мы обсуждаем реализацию. Прикладной код проще некуда. Давай я его ещё раз повторю, для верности. :-) Всё-равно, пока еще не знаю, но что-то мне не нравится в этом коде :)Не бесит, уже хорошо. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 14:32 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей КНе бесит, уже хорошо. :-) Ну, не бесит, конечно, но суховато как-то... Десктоп он такой :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 14:35 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей КМСУпропущено... Всё-равно, пока еще не знаю, но что-то мне не нравится в этом коде :)Не бесит, уже хорошо. :-) ну так. Может еще обернуть в RunTaskAsynkWithMsgBox() ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 14:47 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
netivanАлексей Кпропущено... Не бесит, уже хорошо. :-) ну так. Может еще обернуть в RunTaskAsynkWithMsgBox()Мне в виде расширяющего метода для таска нравится больше. Тем более, после закрытия диалога "подождите" может быть продолжение, вроде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 15:00 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
netivanну так. Может еще обернуть в RunTaskAsynkWithMsgBox()Ну и конечно же, .LockUi() отображает дефолтный диалог, описанный как синглетон. Если для таска нужен специальный диалог, то создаём UiExecutionLocker явно. Получается что-то вроде того, что ты предлагаешь: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 15:12 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
МСУУжас ёптЭто тебе не странички на аспнете клепать. Тут всё серьёзно. Я чуть мозг себе не повредил, когда это придумывал. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 15:14 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей КЯ чуть мозг себе не повредил, когда это придумывал. А если уволишься? Ведь всё РЖД встанет раком! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 15:19 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
МСУАлексей КЯ чуть мозг себе не повредил, когда это придумывал. А если уволишься? Ведь всё РЖД встанет раком! Ну не всё. Но кое что может. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 15:35 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей КМСУпропущено... А если уволишься? Ведь всё РЖД встанет раком! Ну не всё. Но кое что может. :-)Не эксплуатация а доработка конечно. Во всяком случае хочется в это верить. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 15:56 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Алексей К, А почему в тасках для записи в лог не указал параметр OnlyOnFaulted для логирования? Или ты пишешь все подряд? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 18:44 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
unknownfromrusАлексей К, А почему в тасках для записи в лог не указал параметр OnlyOnFaulted для логирования? Или ты пишешь все подряд?Там внутри LogExceptions() соответствующий ContinueWith стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2013, 19:04 |
|
окно ожидания
|
|||
---|---|---|---|
#18+
Для решения задачи в стартовом посте я использую стандартный способ через BusyIndicator. Класс: Код: 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215.
XAML индикатора: Код: xml 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157.
Использование в разметке окна: Код: xml 1. 2. 3.
Использование либо через биндинг в xaml, либо в коде через BISLAFR.IsBusy=true/false ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2013, 09:59 |
|
|
start [/forum/topic.php?all=1&fid=21&tid=1441348]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 303ms |
total: | 457ms |
0 / 0 |