Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1

Оповещение в UI из потока

12.08.2013, 01:05. Показов 1022. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени. суть проблеммы в сл. не работает повторное оповещение UI из потока. в приложении создаеЦа новый поток для выполнения некой длинной операции, чтобы пользователь мог видеть ход выполнения, прогрессбар в UI обновляетЦа из потока через Handler. и все работает прекрасно.... когда поток выполняеЦа впервые. но если я запускаю выполнение потока повторно, ввесь код выполняется отлично, но визуально UI никак не обновляеЦа. вот примеры кода:

поток:
Java
1
2
3
4
5
6
7
8
 myThread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
               DoSomething();
            }
        });
метод в котором выполняется длительная операция:
Java
1
2
3
4
5
6
7
8
9
 private void DoSomething()
    {
// Код выполняющий некие действия...
// ........
 
// обновление прогрессбара
prgHandler.sendMessage(prgHandler.obtainMessage());
 
}
Собственно сам Handler:
Java
1
2
3
4
5
6
7
8
  prgHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {
                prbBAR.incrementProgressBy(1);                
            }
        };
ну запуск потока на исполнение в onClick кнопки:
Java
1
2
3
4
5
6
7
8
9
10
11
12
OnClickListener OnButtonStart =  new OnClickListener()
        {
            @Override
            public void onClick(View v) 
            {               
                if(myThread.getState() == Thread.State.NEW)
                    mThread.start(); // Здесь поток создаеЦа первый раз и все выполняеЦа отлично 
                else
                    myThread.run(); // здесь при повторном нажатии на кнопку поток уже запущен и 
                                          // просто выполняеЦа метод Run. код выполняеЦа правильно, но UI не обновляеЦа
            }
        };
в чем я ошибся и как это исправить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2013, 01:05
Ответы с готовыми решениями:

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

По нажатию на кнопку из другого потока, нужно чтобы 2 потока останавливались
Есть 2 потока, в которых в цикле выполняется метод Thread.sleep(200); По нажатию на кнопку из другого потока, нужно чтобы эти 2 потока...

Выполнение слота основного потока через сигнал второстепенного потока
Доброго времени суток! Вопрос следующий. В основном потоке создается кнопка и Qlabel class Ui_QtGuiApp4Class { public: //...

3
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.08.2013, 01:26
при втором вызове вы просто выполняете все в UI потоке.

Добавлено через 4 минуты
кстати, при помощи AsyncTask можно обойтись без хендлеров.
1
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
12.08.2013, 10:24  [ТС]
а как же тогда быть? чтобы не переписывать все на асинк таск? как вариант смотреть запущен поток или нет и при уже запущенном апдейтить UI напрямую? хотя странное поведение, почему второй раз выполняется в основном потоке?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.08.2013, 10:52
Java
1
2
3
4
5
@Override
public void onClick(View v)  {   
               myThread = new MyThread();
               myThread.start();
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2013, 10:52
Помогаю со студенческими работами здесь

Как из потока управлять формой, если функции потока находятся в другом классе?
Добрый вечер. Возник такой вопрос, никак не могу разобраться. Как из потока управлять формой, если функции потока находятся в другом...

Обращение к элементу WinForms из потока, отличного от потока, в котором это элемент был создан
Пишу приложение, котором при загрузке формы в textbox на этой форме заносятся данные. Причем данных много и процесс занимает длительное...

Записать число в начало потока вернувшись с конца потока после записи нескольких элементов...
public static void Save(List<SomeClass> listSC, String fileName) { using (FileStream fs = File.Create(fileName)) ...

Как из одного потока узнать состояние другого потока
Подскажите пожалуйста, как из одного потока узнать, что другой поток еще не запущен. Например, второй поток формируется в классе...

VC++6.0, как из порожденного потока прочитать переменную главного потока?
Visual C++ 6.0 SP5 Простое диалоговое окно, (MFC) созданное мастером среды VC По нажатию на кнопку создаю поражденный поток, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru