Obecnie tworzę aplikację w języku C # przy użyciu programu Visual Studio. Chcę utworzyć kod, aby gdy zmienna miała wartość 1, wykonywany był określony fragment kodu. Wiem, że mogę użyć instrukcji if, ale problem polega na tym, że wartość zostanie zmieniona w procesie asynchronicznym, więc technicznie rzecz biorąc, instrukcja if może zostać zignorowana, zanim wartość ulegnie zmianie.
Czy można utworzyć procedurę obsługi zdarzenia, aby po zmianie wartości zmiennej wyzwalane było zdarzenie? Jeśli tak, jak mogę to zrobić?
Jest całkowicie możliwe, że mogłem źle zrozumieć, jak działa instrukcja if! Każda pomoc byłaby mile widziana.
c#
visual-studio
silverlight
windows-phone-7
event-handling
James Mundy
źródło
źródło
Odpowiedzi:
Wydaje mi się, że chcesz stworzyć nieruchomość.
Pozwala to na uruchomienie kodu za każdym razem, gdy zmienia się wartość właściwości. Jeśli chcesz, możesz zorganizować tutaj wydarzenie.
źródło
Możesz użyć metody ustawiającej właściwości, aby zgłosić zdarzenie za każdym razem, gdy wartość pola ulegnie zmianie.
Możesz mieć własnego delegata EventHandler lub możesz użyć słynnego delegata System.EventHandler.
Zwykle jest na to wzór:
Oto przykład
Zaletą tego podejścia jest to, że pozwalasz innym klasom, które chcą dziedziczyć z Twojej klasy, na zmianę zachowania, jeśli to konieczne.
Jeśli chcesz złapać zdarzenie w innym wątku, który jest wywoływany, musisz uważać, aby nie zmienić stanu obiektów, które są zdefiniowane w innym wątku, co spowoduje zgłoszenie wyjątku między wątkami. Aby tego uniknąć, możesz użyć metody Invoke na obiekcie, który chcesz zmienić jego stan, aby upewnić się, że zmiana zachodzi w tym samym wątku, w którym zostało zgłoszone zdarzenie, lub w przypadku, gdy masz do czynienia z formularzem systemu Windows może używać BackgourndWorker do wykonywania czynności w równoległym wątku w łatwy i przyjemny sposób.
źródło
W rzeczywistości platforma .NET zapewnia interfejs, którego można używać do powiadamiania subskrybentów o zmianie właściwości: System.ComponentModel.INotifyPropertyChanged. Ten interfejs ma jedno zdarzenie PropertyChanged. Jest zwykle używany w WPF do wiązania, ale uważam, że jest przydatny w warstwach biznesowych jako sposób na standaryzację powiadamiania o zmianie właściwości.
Jeśli chodzi o bezpieczeństwo nici, założyłbym blokadę w seterze, abyś nie napotkał żadnych warunków wyścigu.
Oto moje przemyślenia w kodzie :):
Mam nadzieję, że to jest pomocne :)
źródło
po prostu użyj właściwości
źródło
możesz użyć klasy ogólnej:
i będzie w stanie wykonać następujące czynności:
wynik:
źródło