|
-1 / 3 / 0
Регистрация: 11.01.2012
Сообщений: 267
|
|
Закрепление контролов из разных потоков в одной форме17.02.2012, 14:34. Показов 2699. Ответов 14
Метки нет (Все метки)
Как правильно закрепить к примеру текстбокс или баттон созданные в другом потоке, в форме которая создана в основном потоке? При Controls.Add вылезает ошибка, но через Invoke ее можно решить. Но когда Я вызываю метод Show(), через Invoke то он ругается что к моей форме не в том потоке доступ, если без Invoke, то ругается что доступ не с того потока к моим добавляемым контролам. Судя по всему это изза перебора всех дочерних элементов в формы при вызове метода Show()
0
|
|
| 17.02.2012, 14:34 | |
|
Ответы с готовыми решениями:
14
В одной форме два разных класса
|
|
|
||||||
| 17.02.2012, 17:30 | ||||||
|
Ну код покажи, а так ты просто рассказал о своей проблеме.
Ну вот так всё работает.
1
|
||||||
|
-1 / 3 / 0
Регистрация: 11.01.2012
Сообщений: 267
|
||||||
| 17.02.2012, 19:30 [ТС] | ||||||
|
Не, немного не то что мне надо. вот примерный код
0
|
||||||
|
-1 / 3 / 0
Регистрация: 11.01.2012
Сообщений: 267
|
|
| 17.02.2012, 21:33 [ТС] | |
|
Нет уйти не получится точно. Лучше придумать как закрепить форму одного потока в форме другого. Это редактор как бы и мне нужно чтобы одна из форм работала в другом потоке для большей скорости работы.
Ну в чем проблема я собвственно описал в первом посте, осталось понять как потокобезопасно вложить форму в форму
0
|
|
|
|
|
| 17.02.2012, 21:51 | |
|
А нельзя например какие-либо операции делать в других потоках, а результат уже выводить на эту другую форму (не главную)? Просто странное решение выводить форму в другом потоке, чтобы ускорить работу.
0
|
|
|
-1 / 3 / 0
Регистрация: 11.01.2012
Сообщений: 267
|
|
| 17.02.2012, 22:10 [ТС] | |
|
Нет, те операции жестко привязаны к форме и вызываются из исходника (если точнее то не совсем форма а XNA Game, но она легко превращается в форму которую можно крепить в другую форму)
0
|
|
|
|
|||||||||||
| 17.02.2012, 22:14 | |||||||||||
|
А так?
Вообще много деталей не ясно, поэтому возможно я что-то не то выложил. Добавлено через 2 минуты Опиши подробнее, что нужно в итоге. В каком порядке, что происходит. Как вообще всё это видишь. Вроде такого описания: Есть главное окно, из него можно открыть сколько угодно окон и каждое в новом потоке. В главном окне должны быть ссылки на эти окна, а в дочерних ссылки на главное окно. Из главного окна я должен "уметь" добавлять на дочерние окна элементы управления и т.д.
0
|
|||||||||||
|
-1 / 3 / 0
Регистрация: 11.01.2012
Сообщений: 267
|
|
| 17.02.2012, 22:26 [ТС] | |
|
Не, в твоем примере мы просто создаем форму в другом потоке, но не закрепляем ее.
Я уж не знаю какие детали нужны если честно, я вроде выложил пример и указал что должно получится. Опишу еще раз попробую: 1) Создается форма при старте приложения. 2) Внутри формы создается поток в котором создается новая форма 3) в новой форме мы закрепляем первую форму через Controls.Add() 4) Отображаем вторую форму в нужный нам момент В чем проблема При вызове Show() для второй формы функция Show() перебирает все закрепленные в ней контролы и устанавливает visible в true. Но так как первая форма создана в другом потоке, то изменение этого свойства не потокобезопасно для первой формы. Если же вызывать Show() в потоке первой формы то это не потокобезопасно для второй формы. Вот делема такая.
0
|
|
|
-1 / 3 / 0
Регистрация: 11.01.2012
Сообщений: 267
|
|||
| 17.02.2012, 22:47 [ТС] | |||
0
|
|||
|
|
|||||||||||||
| 18.02.2012, 00:16 | |||||||||||||
|
Так речь о MDI, так сразу и надо было с этого начинать.
Добавлено через 3 минуты Судя по тексту исключения, похоже нельзя:
0
|
|||||||||||||
|
-1 / 3 / 0
Регистрация: 11.01.2012
Сообщений: 267
|
|
| 18.02.2012, 00:18 [ТС] | |
|
Нет не MDI. И формы закрепляются прекрасно. только надо сначала выставить TopLevel=false для закрепляемой формы. у меня все работало и закреплялось пока потоки не разделил.
0
|
|
|
|
|||||||||||||||||
| 18.02.2012, 00:30 | |||||||||||||||||
|
Мне кажется должно быть другое решение. А если всё-таки всё реально
завязано на форме
я представляю это так - вся логика в методах на форме и почти в каждом методе взаимодействие с формой
Добавлено через 1 минуту Добавлено через 4 минуты Вот:
Помоему толку от этого ноль. Вот судя по зависанию основного окна:
1
|
|||||||||||||||||
|
-1 / 3 / 0
Регистрация: 11.01.2012
Сообщений: 267
|
|
| 18.02.2012, 00:54 [ТС] | |
|
Мда тяжелый у меня случай. Но что поделать то. Все завязано на форме жоще некуда. В наследнике от Game переопределяются методы из Game а он сам там у себя внутри их уже вызывает. С того потока с которого сделана форма будет все вызывать, поэтому перенести никак не выйдет.
У меня тоже окно после Show зависает кстате. Не зависает только с BeginInvoke. но и толку нету понятно дело. видимо его напрягает то что разнопоточные контролы приходится показывать в одном методе
0
|
|
| 18.02.2012, 00:54 | |
|
Помогаю со студенческими работами здесь
15
Анимация разных Image на одной форме Просмотр на одной форме из 5 таблиц на разных формах
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
|