Je crée actuellement une application en C # à l'aide de Visual Studio. Je veux créer du code de sorte que lorsqu'une variable a une valeur de 1, un certain morceau de code soit exécuté. Je sais que je peux utiliser une instruction if, mais le problème est que la valeur sera modifiée dans un processus asynchrone, donc techniquement, l'instruction if pourrait être ignorée avant que la valeur ait changé.
Est-il possible de créer un gestionnaire d'événements de sorte que lorsque la valeur de la variable change, un événement soit déclenché? Si oui, comment puis-je faire cela?
Il est tout à fait possible que j'aie mal compris comment fonctionne une instruction if! Toute aide serait très appréciée.
c#
visual-studio
silverlight
windows-phone-7
event-handling
James Mundy
la source
la source
Réponses:
Il me semble que vous souhaitez créer une propriété.
Cela vous permet d'exécuter du code à chaque fois que la valeur de la propriété change. Vous pouvez organiser un événement ici, si vous le souhaitez.
la source
Vous pouvez utiliser un setter de propriétés pour déclencher un événement chaque fois que la valeur d'un champ va changer.
Vous pouvez avoir votre propre délégué EventHandler ou vous pouvez utiliser le célèbre délégué System.EventHandler.
Il existe généralement un modèle pour cela:
Voici un exemple
L'avantage de cette approche est que vous laissez toutes les autres classes qui souhaitent hériter de votre classe modifier le comportement si nécessaire.
Si vous souhaitez intercepter un événement dans un thread différent qu'il est déclenché, vous devez faire attention à ne pas modifier l'état des objets définis dans un autre thread, ce qui entraînera la levée d'une exception de thread croisé. Pour éviter cela, vous pouvez utiliser une méthode Invoke sur l'objet dont vous souhaitez modifier son état pour vous assurer que la modification se produit dans le même thread que l'événement a été déclenché ou dans le cas où vous avez affaire à un Windows Form vous peut utiliser un BackgourndWorker pour faire des choses dans un thread parallèle de manière simple et agréable.
la source
Le framework .NET fournit en fait une interface que vous pouvez utiliser pour notifier les abonnés lorsqu'une propriété a changé: System.ComponentModel.INotifyPropertyChanged. Cette interface a un événement PropertyChanged. Il est généralement utilisé dans WPF pour la liaison, mais je l'ai trouvé utile dans les couches métier comme moyen de normaliser la notification de changement de propriété.
En termes de sécurité des threads, je mettrais un verrou sous le setter afin que vous ne rencontriez aucune condition de course.
Voici mes pensées dans le code :):
J'espère que cela vous sera utile :)
la source
utilisez simplement une propriété
la source
vous pouvez utiliser la classe générique:
et pourra effectuer les opérations suivantes:
résultat:
la source