|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
||||||
Ожидание изменения значения переменной18.03.2016, 10:24. Показов 15300. Ответов 17
Метки нет (Все метки)
Добрый день!
Подскажите, пожалуйста, как выполнить ожидание изменения значения переменной? Не могу разобраться с предложенными вариантами в поиске по форуму.. Суть: Нужно отслеживать поступление изменений в переменную после нажатия кнопки на протяжении длительного времени (делаю это таймером - уж очень глупо выглядит) и если переменная изменилась, то значение передается для обработки в некий метод не подвешивая при ожидании весь поток. void method (int a) // вместо int a должна поступать наша переменная { something... } Добавлено через 30 минут Да, с делегатами пытался разобраться.. пока все сложно.. Передаю данные из одного класса в другой через:
Как же отследить поступление в str новых данных?
0
|
||||||
| 18.03.2016, 10:24 | |
|
Ответы с готовыми решениями:
17
Ожидание потоком определенного значения переменной в другом потоке Отслеживание изменения значения переменной
|
|
|
||||||||||||
| 18.03.2016, 10:31 | ||||||||||||
1
|
||||||||||||
|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
||||||
| 18.03.2016, 10:59 [ТС] | ||||||
|
Сейчас испробую )
Добавлено через 20 минут Выдает ошибку: Имя "Data_valueChaged" отсутствует в текущем контексте (CS0103)
0
|
||||||
|
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
|
||||||
| 18.03.2016, 11:22 | ||||||
|
qficer,
Немного не так.
2
|
||||||
|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
|
| 18.03.2016, 11:40 [ТС] | |
|
Благодарю за отзывы! Сейчас попробую
Добавлено через 8 минут Даценд, подскажите, где же точка входа? Где переменная, значение которой будет передаваться? У меня создан метод и не понятно как внедрить в него этот код, поясните, пожалуйста? Psilon, поясните, пожалуйста?
0
|
|
|
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
|
||||||
| 18.03.2016, 12:09 | ||||||
1
|
||||||
|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
|
| 18.03.2016, 12:18 [ТС] | |
|
Отчаянно благодарю ))
Сейчас попробую реализовать.
0
|
|
|
Master of Orion
|
|
| 18.03.2016, 12:24 | |
|
qficer, передавать нуллы вообще плохая практика. Настолько плохая, что в новой версии языка вводят специальные типа: not-null reference. Гораздо полезнее было бы передать текущий объект.
1
|
|
|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
|||||||
| 18.03.2016, 13:06 [ТС] | |||||||
|
Даценд, Не работает. Добавляю в метод
Psilon, Поясните о чем речь? Что есть передавать null? Как можно решить проблему передачи минимальным и понятным кодом? Могу я вызвать метод класса Main из static class SomeClass, при поступлении данных в переменную метода SomeClass? Добавлено через 2 минуты
0
|
|||||||
|
Master of Orion
|
||||||
| 18.03.2016, 13:18 | ||||||
|
qficer, когда вызывается событие, там передается null, если видите. Хотя класс статичский, что я изначально пропустил. Но статические события вообще редко используются. А общей практикой передавать this (в случае статики можно было бы передавать новое значение):
1
|
||||||
|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
|||||||||||
| 18.03.2016, 13:53 [ТС] | |||||||||||
|
Правильно я понимаю?
Уважаемый Даценд, "добейте" тему, пожалуйста Может проблема в том, что класс static? Как я понимаю вся суть в объявлении EventHandler, который вызывает метод из другого класса? Но если передать из статичного класса в другой (Main) с помощью: Кликните здесь для просмотра всего текста
и уже в классе Main обработать с помощью EventHandler? Подскажите, как обработать ожидание переменной внутри одного класса? Это решит проблему
0
|
|||||||||||
|
Master of Orion
|
|
| 18.03.2016, 13:55 | |
Сообщение было отмечено qficer как решение
Решение
qficer, не совсем. Начиная сверху вниз:
объявляем событие. При вызове события будут вызваны все подписчики (в нашем случае - лямбда из формы). Дальше объявляем полное свойство. Бывают Авто-свойства public int X {get; set;}, а бывают полные - где мы все сами пишем. Т.к. нам нужен контроль над записыванием в переменную, делаем полное свойство и описываем, что после изменения вызывается событие. Затем в конструкторе формы подписываем собственно нашу лямбду. Выводим мессадж бокс с сообщением. Гуид просто генерирует случайную строку, не более того. Можно вместо него "123" написать с тем же успехом. Ну а затем запускаем. И смотрим что происходит. Нажимаем на кнопку. Кнопка изменяет свойство Text. Из-за изменения свойства вызывается событие TextChanged. Так как на событие есть подписчик - лямбда из формы - вызывается она, и показывается мессадж бокс. Конец истории.
1
|
|
|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
|
| 18.03.2016, 13:57 [ТС] | |
|
Psilon, подскажите, как обработать ожидание переменной внутри одного класса? Может есть решение с меньшим количеством кода
?
0
|
|
|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
||
| 18.03.2016, 14:06 [ТС] | ||
|
Psilon, Подписка на событие
Добавлено через 5 минут
0
|
||
|
Master of Orion
|
|||||||||||
| 18.03.2016, 14:35 | |||||||||||
Сообщение было отмечено qficer как решение
Решение
qficer, я бы на вашем месте просто сделал напоминалку. Я в свое время такое писал как лабу. То есть у пользователя есть список напоминаний, он может их добавлять/удалять. При наступлении события должно вызываться событие EventHappened, или что-то в таком духе.
Причем желательно сделать в виде трех модулей: один модуль с самим нотификатором, и две вьюхи - консольное приложение, которое пишет в консоль, и графическое приложение, которое пополняет textbox логами, что где было вызвано (или мессаджбокс вызывает). Это чтобы не было желания вызывать мессажбокс напрямую из класса, который заведует уведомлениями ![]() Что касается реализации, мне помогает понимать та мысль, что делегат - это просто умный указатель на функцию (точнее, на много функций). То есть Мы можем написать
). И когда для работы с переменными используются обычные типы - инты всякие и строки, то при работе с функциями как с переменными используется специальный функциональный тип, который в шарпе имеет имя "делегат". Ну а событие, это самый обычный делегат, который правда на уровне компиляции проверяется специальным образом (событие может вызывать только класс, в котором он объявлен, а вот делегат можнт вызвать кто угодно, это ведь просто указатель на функцию, и все в таком духе), но для рантайма является самым обычным.
1
|
|||||||||||
|
8 / 8 / 4
Регистрация: 09.10.2015
Сообщений: 37
|
|
| 18.03.2016, 15:45 [ТС] | |
|
Спасибо за разъяснения! Доступно и простым языком - это именно то, что я искал.
Теперь понятно, что есть делегат.
0
|
|
| 18.03.2016, 15:45 | |
|
Помогаю со студенческими работами здесь
18
Изменения значения переменной Запрещение изменения значения переменной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль корректности заполнения дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|