|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
||||||||||||||||
Обращение из потока к контролу17.02.2016, 18:08. Показов 4371. Ответов 17
Метки нет (Все метки)
Приветствую!
Сегодня у меня печальный день((( Пол дня потратил чтобы решить проблему, так и не смог понять в чем дело. Вернее отдаленно в теории предположительно знаю в чем затык, но как его решить, не пойму. Суть вот в чем. Есть Form1 Есть модуль Есть контрол расположенный на Form1 Что я пытался сделать. Из Form1 вызываю процедуру, которая расположена в модуле. Процедура в модуле по задумке должна была обратится к контролу на Form1 и установить для контрола свойство visible.true Код формы
Спасите, помогите! )))
0
|
||||||||||||||||
| 17.02.2016, 18:08 | |
|
Ответы с готовыми решениями:
17
Обращение к контролу из потока
Обращение к контролу из потока |
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
||||||
| 17.02.2016, 19:42 | ||||||
Сообщение было отмечено edward_freedom как решение
Решение
Тут дело в том что в другом потоке немногого иначе представляется обращение к классам и объектам из основного потока, если мы пытаемся обратиться из соседних классов и модулей.
Для второстепенного потока так же доступен класс form1, но он не реализован для него, а вот что в основном потоке есть реализованный класс он игнорирует. Поэтому требуется уникальное имя объекта в основном потоке который невозможно создать как "new Form1"
4
|
||||||
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
|
| 17.02.2016, 20:04 [ТС] | |
|
Sklifosofsky, не работает.
Вот такое исключение выскакивает: Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll Дополнительные сведения: Невозможно вызвать Invoke или BeginInvoke для элемента управления до завершения создания дескриптора окна. Не в курсе как это исправить?
0
|
|
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
|
| 17.02.2016, 20:09 | |
|
Что-то упустили
WindowsApplication61.rar
1
|
|
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
||||||
| 17.02.2016, 20:16 | ||||||
1
|
||||||
|
|
|
| 17.02.2016, 20:37 | |
|
А можно же просто присваивать значение Public переменной типа Boolean в модуле. А потом в форме на основе этой переменной выполнять действия над контролами.
0
|
|
|
|
|
| 17.02.2016, 20:39 | |
|
Не по теме: А можно на ассемблере писать. :) Не атомарные значения нельзя просто взять и заменить, если к ним есть одновременный доступ из разных потоков. Элементы GUI как раз и относятся к запрещённым. А городить тонны булевых флагов = говнокод.
0
|
|
|
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
|
| 17.02.2016, 20:42 [ТС] | |
|
Sklifosofsky, огромное спасибо, заработало.
![]() Дело было не в form load, это я просто тут примитивный пример привел, чтобы проблема была не нагруженная левым кодом. А исключение вылетало из-за таба. У меня на форме таб и на табе прогрессбар. Я до открытия таба вызывал Progress() поэтому и вылезало исключение. Sklifosofsky,
0
|
|
|
|
||
| 17.02.2016, 20:44 | ||
1
|
||
|
|
|
| 17.02.2016, 20:50 | |
|
Andrey PSt, они уже существуют и являются частью фреймворка. Но илитные говнокодеры конечно пишут свои велосипеды.
Добавлено через 2 минуты Смысл их создания и применения есть в том, чтобы Вам же пришлось писать меньше кода. Когда кода меньше, меньше шанс наделать в нём ошибок.
0
|
|
|
|
|||||||||||
| 17.02.2016, 20:56 | |||||||||||
|
То есть:
вот этого кода:
1
|
|||||||||||
|
|
|
| 17.02.2016, 20:59 | |
|
Andrey PSt, ага, конечно.
А теперь сделайте, чтобы положение прогрессбара обновлялось, когда его надо обновить из потока. Ну или, если у Вас тяга к булевым переменным, то как установить булевое свойство Checked у CheckBox'а из потока.
0
|
|
|
|
|
| 17.02.2016, 21:06 | |
|
А зачем устанавливать свойство у CheckBox'а во время выполнения потоковой процедуры из модуля!??
Кому, где и когда это нужно. Максимум, где это применимо, так это изменения прогресБара. Но такой задачи не было поставлено ТС.
0
|
|
|
|
||||
| 17.02.2016, 21:12 | ||||
|
А это что тогда?
Так приведёте пример? Добавлено через 4 минуты Обращение к CheckBox.Checked и к Control.Visible одинаковое. Так что это имеет прямое отношение к вопросу ТС-а.
0
|
||||
|
|
||
| 17.02.2016, 21:20 | ||
Вот я и предложил использовать флаг после выполнения Модульных процедур. Согласен, мое решение - это частный случай и оно не решит задачу изменений контролов во время выполнения Модульных процедур.
0
|
||
|
|
|
| 17.02.2016, 21:24 | |
|
В конце процедур модуля, выполняющихся в потоке. Т.е. Visible = true ставится из потока.
Добавлено через 1 минуту Перевод этого действия из отдельного потока в поток GUI как раз и обеспечивается синхронизацией через Invoke().
2
|
|
|
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
|
||||||
| 18.02.2016, 15:43 | ||||||
|
Кроме Invoke, можно попробовать так:
1
|
||||||
| 18.02.2016, 15:43 | |
|
Помогаю со студенческими работами здесь
18
Кросспоточное обращение к контролу Обращение к контролу из класса Обращение к контролу по номеру Достпуп к контролу с потока
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|