129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
1

Многопоточность. Доступ к общим данным

10.08.2019, 16:03. Показов 669. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, коллеги!

Предыстория. Имеется главная форма, на которой располагаются объекты (пользовательские элементы управления). У формы есть массив всех расположенных на ней объектов. Один из объектов должен передавать информацию всем объектам с таким же именем на форме, а так же в другие приложения.

Вот в этой теме Вызов события в MemoryMappedFiles я нашел решение как это делать. Если вкратце, то записываю данные в MemoryMappedFile и сигнализирую всем с помощью
VB.NET
1
eventX = New Threading.EventWaitHandle(False, Threading.EventResetMode.ManualReset, "000" & myName)
Сигнал в созданных потоках отлавливается, но при попытке его обработать необходимо обращение к главной форме и указанному массиву. Вот здесь не получается - вылетают ошибки индексации.
Пробовал также, как костыль создать таймер и запускать его, а в нем работать с главной формой. Таймер запускается. Его свойство Enabled при проверке = True. Но он ни разу не срабатывает.

Может кто подсказать как решить данную проблему?

Не по теме:

P.S. Вот и добрался я до кошмаров многопоточности

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2019, 16:03
Ответы с готовыми решениями:

Синхронизация доступа к общим данным
Вечер добрый, товарищи. Возникло три вопроса. Первый. Возможно ли создать массив byte с...

Доступ к общим данным с разных устройств
Имеется ли стандартное (для разработки под android) средство хранения информации (файловое, бд)?...

Доступ к общим папкам в ХР
Как задать пароль на общую папку в ХР-Pro, чтоб при доступе из сети спрашивал пароль и не лезли все...

Доступ к общим ресурсам
Проблема - пропадает доступ к общим ресурсам сети, либо предлагает ввести логин/пароль. На обоих...

1
1035 / 888 / 209
Регистрация: 29.09.2015
Сообщений: 997
11.08.2019, 17:50 2
Для вызова из дочернего потока в форму используйте Invoke
https://docs.microsoft.com/ru-... mework-4.8

VB.NET
1
2
3
        Me.Invoke(Sub()
                      'код работы с данными
                  End Sub)
Для синхронной работы с данными, в случае если не затрагиваются элементы формы, используйте SyncLock

Код в теле класса
VB.NET
1
2
3
4
5
6
7
8
9
10
    Private _syncRoot As Object
 
    Public ReadOnly Property SyncRoot As Object
        Get
            If _syncRoot Is Nothing Then
                Threading.Interlocked.CompareExchange(Of Object)(_syncRoot, New Object(), Nothing)
            End If
            Return _syncRoot
        End Get
    End Property
Использование
Код в теле метода
VB.NET
1
2
3
        SyncLock Me.SyncRoot
            'код работы с данными
        End SyncLock
1
11.08.2019, 17:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2019, 17:50
Помогаю со студенческими работами здесь

Доступ к общим папкам по локалке
Здравствуйте! Проблема такая. Купил новый комп, установил Винду и подключил к локальной сети....

Доступ к общим папкам и файлам
Моя программа включает в себя функционал по работе с собственным ярлыком (на случай если его нужно...

Потоки и доступ к общим ресурсам!
Здравствуйте! Почитал форум (ограничился 5 темами) и ничего дельного не нашел. Задача: ...

Настройка VPN + доступ к общим файлам
Добрый день! Хочу с рабочего компьютера получать доступ к файлам домашнего компьютера. Оба работают...

Доступ к общим ресурсам на сервере из других подсетей
Такая ситуация, есть старый сервер с одной сетевой 192.168.1.5, на котором расшарено несколько...

Отсутствует доступ к общим папкам на компьютер в локальной сети
Здравствуйте. Два компа под Win10 в локальной сети с одним роутером. Один комп на витой паре....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru