Ich erstelle derzeit eine Anwendung in C # mit Visual Studio. Ich möchte einen Code erstellen, damit, wenn eine Variable den Wert 1 hat, ein bestimmter Code ausgeführt wird. Ich weiß, dass ich eine if-Anweisung verwenden kann, aber das Problem ist, dass der Wert in einem asynchronen Prozess geändert wird, sodass die if-Anweisung technisch ignoriert werden kann, bevor sich der Wert geändert hat.
Ist es möglich, einen Ereignishandler zu erstellen, damit bei einer Änderung des Variablenwerts ein Ereignis ausgelöst wird? Wenn ja, wie kann ich das machen?
Es ist durchaus möglich, dass ich falsch verstanden habe, wie eine if-Anweisung funktioniert! Jede Hilfe wäre sehr dankbar.
c#
visual-studio
silverlight
windows-phone-7
event-handling
James Mundy
quelle
quelle
Antworten:
Mir scheint, Sie möchten eine Immobilie erstellen.
Auf diese Weise können Sie jederzeit Code ausführen, wenn sich der Eigenschaftswert ändert. Sie könnten hier eine Veranstaltung veranstalten, wenn Sie möchten.
quelle
Sie können einen Eigenschaftssetter verwenden, um ein Ereignis auszulösen, wenn sich der Wert eines Felds ändert.
Sie können Ihren eigenen EventHandler-Delegaten haben oder den berühmten System.EventHandler-Delegaten verwenden.
Normalerweise gibt es dafür ein Muster:
Hier ist ein Beispiel
Der Vorteil dieses Ansatzes besteht darin, dass Sie alle anderen Klassen, die von Ihrer Klasse erben möchten, bei Bedarf das Verhalten ändern lassen.
Wenn Sie ein Ereignis in einem anderen Thread abfangen möchten, das ausgelöst wird, müssen Sie darauf achten, den Status von Objekten, die in einem anderen Thread definiert sind, nicht zu ändern, da dadurch eine Thread-übergreifende Ausnahme ausgelöst wird. Um dies zu vermeiden, können Sie entweder eine Invoke-Methode für das Objekt verwenden, dessen Status Sie ändern möchten, um sicherzustellen, dass die Änderung in demselben Thread erfolgt, in dem das Ereignis ausgelöst wurde, oder für den Fall, dass Sie mit einem Windows Form arbeiten kann einen BackgourndWorker verwenden, um Dinge in einem parallelen Thread nett und einfach zu erledigen.
quelle
Das .NET Framework bietet tatsächlich eine Schnittstelle, über die Sie Abonnenten benachrichtigen können, wenn sich eine Eigenschaft geändert hat: System.ComponentModel.INotifyPropertyChanged. Diese Schnittstelle hat ein Ereignis PropertyChanged. Es wird normalerweise in WPF zum Binden verwendet, aber ich habe es in Geschäftsschichten als nützlich erachtet, um die Benachrichtigung über Eigenschaftsänderungen zu standardisieren.
In Bezug auf die Gewindesicherheit würde ich im Setter ein Schloss unterbringen, damit Sie keinen Rennbedingungen ausgesetzt sind.
Hier sind meine Gedanken im Code :):
Hoffe das ist hilfreich :)
quelle
Verwenden Sie einfach eine Eigenschaft
quelle
Sie können die generische Klasse verwenden:
und wird in der Lage sein, Folgendes zu tun:
Ergebnis:
quelle