![]() |
Доступ к GUI с иного потока
Вложений: 1
Добрый вечер вам!
CLR приложение (.Net средствами С++). У меня есть форма, в форме есть контролы такие как кнопка, прогрес-бар, дата-грид-виев (таблица). Все ето создавалось в основном потоке. У меня появился новый поток после клика на кнопку и етот поток должен:
Код:
public: Код:
public: void DoProcessing() Вложение 18837 Пожалуйста подскажите, как это лучше исправить! Можно ли обойтись без множества блоков try-catch? Заранее спасибо! |
Ответ: Доступ к GUI с иного потока
Invoke();
|
Ответ: Доступ к GUI с иного потока
Да! Спасибочки!
Но как пользоваться этим Invoke() ??? Уже настрочил делегатов: Код:
public: delegate void MyDel(); Сразу же при: progressBar->Value = 1; :( |
Ответ: Доступ к GUI с иного потока
В принципе правильное решение - это события, но когда тебе просто надо обновить прогресс бар, воротить систему событий как-то не хочется, поэтому проще воспользоваться методом Invoke.
Скопировал из своего (Это C#, но суть все равно одна): Код:
public partial class MainForm : Form Код:
Invoke(_logPtr, "SOME MESSAGE", Color.Black); |
Ответ: Доступ к GUI с иного потока
[критикан]
Всё какие-то свиристелки. Почему б не использовать WinAPI? Или тут что-то про кросплатформенность - тогда Boost?[/критикан] В своё время, когда решал подобную задачу (два потока - один постоянно крутит цикл с рассчётами, второй - ГУИ: обрабатывает кнопочки и с некоторой невысокой частотой обновляет данные о работе первого потока) опирался на статью "Организация межпотокового взаимодействия с использованием объектов ядра операционной системы" (в журнале "Вестник компьютерных и информационных технологий") |
Ответ: Доступ к GUI с иного потока
Цитата:
Цитата:
|
Ответ: Доступ к GUI с иного потока
Спасибо большое за розяснения.
У меня было времени в обрез потому, я все переделал на BackgroundWorker... Вот пример: Код:
private: System::ComponentModel::BackgroundWorker^ backgroundWorker; |
Ответ: Доступ к GUI с иного потока
.NET CLR зло ИМХО, юзай шарп
|
Часовой пояс GMT +4, время: 04:55. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot