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

TextBox и 100 потоков

08.02.2018, 23:41. Показов 2391. Ответов 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
13315 / 7771 / 1688
Регистрация: 25.05.2015
Сообщений: 23,681
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru