Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286

TextBox и 100 потоков

08.02.2018, 23:41. Показов 2593. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что будет, если 100 потоков обратятся к TextBox ? нужна ли синхронизация например

C#
1
    lock ("add_text2") e?.Invoke((Action)(() => { e.MaskBox.AppendText("[" + DateTime.Now.ToLongTimeString() + "] " + text + "\r\n"); }));
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2018, 23:41
Ответы с готовыми решениями:

Разработать программу, генерирующую n потоков в пуле потоков CLR
Добрый вечер. Решил поделать старые лабораторные, которые мне уже давно нужно было сдавать, но встрял на одном задании: "Разработать...

Построить вертикальную стрелку, направленную из точки (100, 100) в точку (100, 50)
Стрелка состоит из отрезка прямой и равностороннего треугольника-острия. Сторона треугольника, пересекающая отрезок, образует с ним прямой...

Синхронизация потоков на элементарном уровне (переключение потоков)
в общем разбираюсь с потоками, на сколько понял мне нужен lock Вот имеется просто пример public void RunAdd() ...

53
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 13:46  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
Всё же я склонен больше к тому, что данные не успевают обновляться, либо то откуда вы считываете их не знает об этих изменениях, и в один прекрасный момент вы отдаёте ему тот идентификатор которого не существует.
Я прописал так и вроде работает , может из-за того, что сразу несколько потоков вызывают ??
C#
1
2
3
4
 lock ("ddddddd")
            {
                e?.BeginInvoke((Action)(() => { e.MaskBox.AppendText("[" + DateTime.Now.ToLongTimeString() + "] " + " [" + Send.Gsend.dataGridView1[1, j].Value + "] " + text + "\r\n"); if (s != null) s.Caption = (Convert.ToInt32(s.Caption) + 1).ToString(); }));
            }
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
09.02.2018, 14:00
может да, может нет, я не знаю почему у Вас индексы "скачут" и что происходит с данными в датагрид. код весь у Вас, дэбагом почти умеете пользоваться, осталось научится смотреть стэк вызовов и искать причину, почему у Вас 14 элементов и 14 идентификатор приходит вместо 13ого например, какой этап не обновил за собой данные для других, или кто удаляет данные когда с ними работает кто-то ещё
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.02.2018, 14:01
Цитата Сообщение от dimasik9281 Посмотреть сообщение
lock ("ddddddd")
как это вообще должно работать?!
1
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 14:03  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
как это вообще должно работать?!
нужно было делать черед обджект ?

Добавлено через 52 секунды
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
ожет да, может нет, я не знаю почему у Вас индексы "скачут" и что происходит с данными в датагрид. код весь у Вас, дэбагом почти умеете пользоваться, осталось научится смотреть стэк вызовов и искать причину, почему у Вас 14 элементов и 14 идентификатор приходит вместо 13ого например, какой этап не обновил за собой данные для других, или кто удаляет данные когда с ними работает кто-то ещё
ну смотри, такое же может быть, если ты сразу с двух потоков обращаешься к дата гриду ?
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
09.02.2018, 14:05
dimasik9281, может, если эти потоки добавляют/удаляют данные из этого датагрида
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 14:08  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
может, если эти потоки добавляют/удаляют данные из этого датагрида
Подскажи , пожалуйста, когда запускаются потоки, на некоторых потоках пишет, что ссылка не указывает на экземпляр класса CancellationTokenSource ?
Хотя в цикле создаю и присваиваю

C#
1
  Api.Cts[a] = new CancellationTokenSource();
Миниатюры
TextBox  и 100 потоков  
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
09.02.2018, 14:33
Вы уверены что на это строке ошибка? если на ней смотрите что хранится в Api.Cts есть ли эти данные
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 14:34  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
Вы уверены что на это строке ошибка? если на ней смотрите что хранится в Api.Cts есть ли эти данные
Заменил CancellationTokenSource на булл и все работает
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
09.02.2018, 14:58
А зачем вобще писать из потоков непосредственно в текстбокс? Сделайте буфер и периодически сбрасывайте данные из него.
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 14:59  [ТС]
Цитата Сообщение от freeba Посмотреть сообщение
текстбокс? Сделайте буфер и периодически сбрасывайте данные из него.
какой буфер ?
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
09.02.2018, 15:00
Да туже BlockingCollection
0
Эксперт .NET
 Аватар для Rius
13825 / 7897 / 1707
Регистрация: 25.05.2015
Сообщений: 23,965
Записей в блоге: 14
09.02.2018, 15:22
ТС даже не может объяснить, зачем ему 100 потоков.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.02.2018, 15:24
Цитата Сообщение от dimasik9281 Посмотреть сообщение
нужно было делать черед обджект ?
https://stackoverflow.com/ques... ronization

я бы не завязывался на том ньюансе, что строковая константа в приложении имеет один референс.

по теме: Вообще, внедрять логику в форму -- плохо. У вас должена быть модель данных + отдельный класс обработчик, и уже на них завязывать Grid. Учитывая, что Grid можно обновлять только из одного потока, придется еще сделать обертку из ивентов над моделью для нормальной синхронизации (думаю уже есть какие-либо готовые решения).
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 16:42  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
тывая, что Grid можно обновлять только из одного потока, придется еще сделать обертку из ивентов над моделью для нормальной синхронизации (думаю уже есть какие-либо готовые решения).
Для моей цели необходимо научится работать с потомками и вывод, а также синхронизация

А подска
Цитата Сообщение от Rius Посмотреть сообщение
аже не может объяснить, зачем ему 100 потоков.
Добавлено через 42 секунды
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
ё же я склонен больше к тому, что данные не успевают обновляться, либо то откуда вы считываете их не знает об этих изменениях, и в один прекрасный момент вы отдаёте ему тот идентификатор которого не существует.
скажи, пожалуйста, ты говорил, что одовременньо нельзя редактировать или записывать , так ?
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
09.02.2018, 17:19
dimasik9281, всё верно, т.к когда ты 1 поток удалишь данные, а второй в этот момент будет пытаться их прочитать (т.к он уже получил что такой индекс есть) выйдет ошибка как у тебя выход за пределы.
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 17:22  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
но, т.к когда ты 1 поток удалишь данные, а второй в этот момент будет пытаться их прочитать (т.к он уже получил что такой индекс есть) выйдет ошибка как у тебя выход
У меня 1 метод для считывания и второй для редактирования ( увеличения счетчика ) . запускаю 100 потооков и так выходит, что 2 метода в процессе и считывают и редактируют, нужно сделать их в один и там просто проверку сделать, если читаешь, то делай это, если нет, то редактируй ?
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
09.02.2018, 17:26
Вам нельзя допустить такого момента когда 1 поток удалит данные, а второй в этот момент уже будет иметь у себя индекс удалённых данных
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 17:28  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
такого момента когда 1 поток удалит данные, а второй в этот момент уже будет иметь у
Я не удаляю данны, а только увеличиваю количество на +1 в каждой ячейке )
один метод считывает , а второй редакрирует ? если их закинуть в один и накинуть лоск ?

C#
1
2
3
4
5
6
7
8
9
10
 lock ("add_text2")
{
  if ( редактирование )
  тряяялялял
 else  
 if ( считывние )
тряляля ? та 
 
 
}
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
09.02.2018, 17:45
считывание и редактирование не должно давать ошибки доступа к индексу
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
09.02.2018, 17:47  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
и редактирование не должно давать ошибки доступа к индексу
я понял, что ошибка выдается из-за того, что потоки работают в разных методах и идет считывание и редактирование одовременно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2018, 17:47

Синхронизация потоков: проблема гонки потоков
Есть проблема в синхронизации потоков, которую я не знаю, как решить. Точнее у меня получается типичная гонка потоков. Есть функция,...

Обработка массива из 100 случайных чисел от -100 до 100
Определите, какое число встречается в этом массиве чаще всего и выведите это число. Если таких чисел несколько, необходимо вывести их все в...

TextBox. Ввод только цифр от 16 до 100
задача: ввод только цифр от 16 до 100 как можно регулярным выражением сделать от 16-100 так не работает! или может еще какой способ...

Как запретить ввод в TextBox числа, большего 100
Извиняюсь, но не нашел ответа на форуме. в Общем есть калькулятор. И в 1 из текст боксов где пользователю нужно вписать значение, мне...

Как заполнить 100 TextBox через цикл VBA в Word
Есть 100 текстбоксов в ворде. Нужно через цикл изменить параметр TextBox.Text, но я не знаю как обратиться к нему.


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru