В настоящее время я создаю приложение на C # с помощью Visual Studio. Я хочу создать код, чтобы, когда переменная имеет значение 1, выполнялась определенная часть кода. Я знаю, что могу использовать оператор if, но проблема в том, что значение будет изменено в асинхронном процессе, поэтому технически оператор if можно игнорировать до того, как значение изменится.
Можно ли создать обработчик событий, чтобы при изменении значения переменной запускалось событие? Если да, то как я могу это сделать?
Вполне возможно, что я мог неправильно понять, как работает оператор if! Любая помощь приветствуется.
c#
visual-studio
silverlight
windows-phone-7
event-handling
Джеймс Манди
источник
источник
Ответы:
Мне кажется, вы хотите создать недвижимость.
Это позволяет запускать код в любое время при изменении значения свойства. Вы можете организовать здесь мероприятие, если хотите.
источник
Вы можете использовать установщик свойств, чтобы вызывать событие всякий раз, когда значение поля собирается измениться.
У вас может быть собственный делегат EventHandler или известный делегат System.EventHandler.
Обычно для этого есть шаблон:
Вот пример
Преимущество этого подхода состоит в том, что вы позволяете любым другим классам, которые хотят наследовать от вашего класса, при необходимости изменять поведение.
Если вы хотите поймать событие в другом потоке, который вызывается, вы должны быть осторожны, чтобы не изменить состояние объектов, которые определены в другом потоке, что приведет к возникновению исключения между потоками. Чтобы избежать этого, вы можете использовать метод Invoke для объекта, состояние которого вы хотите изменить, чтобы убедиться, что изменение происходит в том же потоке, в котором возникло событие, или в случае, если вы имеете дело с формой Windows Form, которую вы можно использовать BackgourndWorker, чтобы легко и просто выполнять задачи в параллельном потоке.
источник
Платформа .NET фактически предоставляет интерфейс, который можно использовать для уведомления подписчиков об изменении свойства: System.ComponentModel.INotifyPropertyChanged. Этот интерфейс имеет одно событие PropertyChanged. Обычно он используется в WPF для привязки, но я нашел его полезным на бизнес-уровнях как способ стандартизации уведомлений об изменении свойств.
С точки зрения безопасности потоков я бы поставил блокировку в сеттере, чтобы вы не столкнулись с какими-либо условиями гонки.
Вот мои мысли в коде :):
Надеюсь, это будет полезно :)
источник
просто используйте свойство
источник
вы можете использовать общий класс:
и сможет делать следующее:
результат:
источник