11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
|
|
1 | |
Отзывчивость ПО. Как улучшить?16.02.2017, 17:22. Показов 612. Ответов 11
Метки нет (Все метки)
Есть программка, постепенно дополнялась и сейчас некоторые операции (в основном выполнение внешних программ) могут занимать несколько минут. В это время программа практически перестает реагировать на внешние события, попытка переместить окно вообще обречена на провал (у меня не получилось). Так же к примеру если выскочила ошибка (а значить ошибок может быть однотипных много), то проще снять процесс чем закрыть через штатную кнопку закрытия (добавлять меню закрытия в кнопку не хочется, хотя наверняка так можно). Есть ли варианты побороть такое поведение программы?
0
|
16.02.2017, 17:22 | |
Ответы с готовыми решениями:
11
Как улучшить код? Как улучшить код? Как можно улучшить уровень С#? Системная информация - как улучшить код? |
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
16.02.2017, 17:25 | 2 |
Разумеется. Надо вынести все трудоемкие операции в отдельные потоки, чтобы они не вешали поток, в котором работает пользовательский интерфейс.
0
|
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
|
|
16.02.2017, 18:12 [ТС] | 3 |
Тогда возможно самое простое решение это запускать в отдельном потоке private void, это возможно?
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
16.02.2017, 18:16 | 4 |
Да, но там имеются всевозможные "если".
Например, если в ходе работы вы обновляете пользовательский интерфейс, то из отдельного потока это нужно делать иначе, чем обычно.
0
|
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
|
|
16.02.2017, 18:23 [ТС] | 5 |
Интерфейс не обновляется, вся информация пользователю (кроме ошибок) выдается до вызова private void. Последний собственно по всей видимости (проверить то не могу точно) и грузит основной поток, хотя его работа заключается в создании и ожидании результата выполнения внешних программ. Мне кажется если есть вариант его выноса в "автономное плавание", о это будет вариант. Основная программа будет же дожидаться его завершения? Иначе выполнится все возможно быстрее, но диску и расходу памяти не позавидуешь.
0
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
16.02.2017, 19:15 | 6 |
0
|
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
|
|
16.02.2017, 23:46 [ТС] | 7 |
Как тогда это сделать? Куда смотреть?
0
|
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
|
||||||
17.02.2017, 16:20 | 8 | |||||
смотреть в класс System.Threading.Thread. Из отдельного потока, к интерфейсу следует обращаться через Invoke, пример:
0
|
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
|
|
18.02.2017, 09:08 [ТС] | 10 |
Что за таски?
0
|
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
|
|
18.02.2017, 10:57 | 11 |
Про async await почитайте:
https://habrahabr.ru/post/139734/ https://metanit.com/sharp/tutorial/13.3.php Добавлено через 42 секунды Тогда это рано, начинайте с https://metanit.com/sharp/tutorial/12.2.php
0
|
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
|
|
13.03.2017, 01:10 [ТС] | 12 |
Что-то туго идет у меня отдельный поток c Threading и прочим. Там же получается у меня вызовы идут на другие void и сведения в текстбокс пишутся, для видимости что не висим (поток главного окна), и в файл записываются а они уже получаются в разных потоках, на что ругается при попытке запустить код в фоне. Как-то подружить их можно? По факту все эти отдельные блоки уже довольно тесно переплетены. Или только ограничить выход для сообщений в главном окне?
Проверил без вывода сообщений на основе async. Работает в фоне нормально, окно программы можно свернуть и развернуть, передвинуть и т.п. Обработку ошибок не проверял. Но как в текстбокс писать можно текущие операции и держать поток в фоне? Я так понимаю как-то нужно передавать из фонового потока в основной, но как?
0
|
13.03.2017, 01:10 | |
13.03.2017, 01:10 | |
Помогаю со студенческими работами здесь
12
Как можно улучшить имеющийся консольный калькулятор Отзывчивость сайта Плохая отзывчивость клавиатуры Как улучшить? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |