Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557

Обьект доступный только с потока в котором создан

08.01.2016, 12:53. Показов 698. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Интересует как делается например в WinForms, Unity3d - что например к Win форме можно обращаться только с интерфейсного потока, использовать api unity3d - только с основного потока.

Как реализуется чтобы обращение к обьекту можно было сделать только из потока в котором создан обьект?
Интересует - эта возможность реализована на уровне .Net или нужно при написании своей библиотеки встраивать проверки, в котором потоке идет создание, вызов методов обьекта и уже там генерировать ексепшен?
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2016, 12:53
Ответы с готовыми решениями:

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

Попытка доступа к элементу не из того потока, в котором он был создан
Имею такой код: string strRegex8 = @"Проведено боёв: </td>\s*<*tdclass=""td-number""> 7 (?<Number>*+)*</td>"; ...

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

6
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
11.01.2016, 16:48  [ТС]
Вопрос актуален.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.01.2016, 17:44
ASDFD12, дело тут не в самом объекте, а в типе потока, в который он помещается. Есть STAThread, есть MTAThread.
Тут почитайте.

Добавлено через 7 минут
И тут про апартаменты потоков тоже можете глянуть.
1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.01.2016, 17:58
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Как реализуется чтобы обращение к обьекту можно было сделать только из потока в котором создан обьект?
Это реализуется прямой проверкой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    class Foo
    {
        private Thread myThread;
 
        public Foo()
        {
            myThread = Thread.CurrentThread;
        }
 
        public void Method()
        {
            //check thread
            if (myThread != Thread.CurrentThread)
                throw new Exception("Crossthread access is denied!");
            //...
        }
    }
Встроенных средств проверки доступа из другого потока во фреймворке, насколько я знаю, нет.

Цитата Сообщение от insite2012 Посмотреть сообщение
апартаменты потоков
Апартаменты не используются в дотнете. Это влияет только на COM объекты (или какие-то вызовы внешних неуправляемых библиотек, типа WinAPI ), которые вы возможно будете создавать в своем приложении.
1
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
11.01.2016, 18:12  [ТС]
Storm23, так и предполагал, только вот интересно касательно Unity3d api, это что получается, что разработчики впихнули во все нужные методы эти проверки? Или эту проверку возможно как то более глобально по красивому встроить, возможно атрибут какой то для класса?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.01.2016, 18:21
Цитата Сообщение от ASDFD12 Посмотреть сообщение
получается, что разработчики впихнули во все нужные методы эти проверки? Или эту проверку возможно как то более глобально по красивому встроить, возможно атрибут какой то для класса?
Ну это можно сделать каким нибудь AOP фреймворком, который умеет внедрять код.
Но это конечно в какой-то степени костыли.

PS И кстати Unity3D написан не на C# и вообще не на дотнете, так что этот пример не показателен.
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
11.01.2016, 18:29
ThreadLocal<T> - класс
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2016, 18:29
Помогаю со студенческими работами здесь

Попытка доступа к элементу управления не из того потока, в котором он был создан
Здравствуйте, уважаемые знатоки. Помогите, плиз, с задачкой. Иначе я сломаю комп до того, как он сломает мне мозг ))) Почему-то...

Ошибка доступ к элементу ProgressBar не из того потока, в котором он был создан
Здравствуйте друзья. Cross-thread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created...

Попытка доступа к элементу управления 'label2' не из того потока, в котором он был создан
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Попытка доступа к элементу управления Label1 не из того потока в котором он был создан
Здравствуйте, у меня проблема, дело в том что при запуске генераций клеток выдает подобное сообщение &quot;недопустимая операция в...

Com port попытка доступа к элементу управления не из того потока, в котором он был создан
попытка доступа к элементу управления 'label2' не из того потока, в котором он был создан. Собственно, впытаюсь получить значения с ком...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
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