myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Event soll nur einmalig Informationen liefern
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Event soll nur einmalig Informationen liefern

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Pat2381
myCSharp.de-Mitglied

Dabei seit: 11.08.2019
Beiträge: 2


Pat2381 ist offline

Event soll nur einmalig Informationen liefern

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo liebe Community,

nach meiner unglücklichen Titelbeschreibung, möchte ich jetzt mal kurz erklären was mir nicht klar ist, oder wo ich Hilfe bräuchte.

Ich habe hier eine Event das feuert, in dieser Methode des aufgerufenen Events, bekomme ich einen Wert!
Dieser Wert ändert sich jetzt ja immer wieder, wenn das Event feuert.

Ich möchte diesen Wert einmal "speichern", ohne das er sich wieder ändert! Ich muss Ihn aber an anderer Stelle im Code wieder auf Null setzten können!

C#-Code:
namespace Connector
{

   public partial class ecConnector : Form
   {
     public ecConnector()
     {
        Telemetry = new SdkTelemetry();
        Telemetry.Data += Telemetry_Data;

      }

       private void Telemetry_Data(SCTelemetry data, bool update)
       {
          // Hier bekomme ich jetzt meinen Wert

                  Variable = data.IRGENDWAS    // Diesen Wert möchte ich jetzt zwischenspeichern, ohne das er sich noch mal ändert

        }
   }
}

Hab ich hier Grundsätzlich was nicht verstanden? Geht das überhaupt so, wie ich das gerne hätte, oder gibt es einen anderen Weg?
Ich hoffe ich konnte mein Anliegen so halbwegs vernünftig erklären!

Ich wünsche euch noch einen schönen Sonntag.

Gruß Pat2381
11.08.2019 13:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.321
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du kannst doch im einfachsten Fall prüfen ob deine Variable, in der du den Wert speichern willst, Null ist und übernimmst dann einmalig den Wert.
So kannst du beim erneuten Durchlauf der Event Methode den nächsten Wert ignorieren, bis deine Variable wieder Null ist.
Das zwischen speichern kannst du dann in einer Property o.ä. innerhalb deiner Form Klasse machen.
Das sollte das Problem lösen.

Ansonsten musst du mal etwas mehr Code zeigen, der erklärt was du vorhast.

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 11.08.2019 13:55.

11.08.2019 13:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KroaX KroaX ist männlich
myCSharp.de-Mitglied

avatar-4080.jpg


Dabei seit: 31.08.2009
Beiträge: 278
Herkunft: Köln


KroaX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ohne genauer zu wissen was dein Vorhaben ist. Du kannst natürlich die Event Abonnierung abschalten sobald du der Wert das erste mal bekommen hast.

C#-Code:
private void Telemetry_Data(SCTelemetry data, bool update)
       {
          // Hier bekomme ich jetzt meinen Wert

                  Variable = data.IRGENDWAS    // Diesen Wert möchte ich jetzt zwischenspeichern, ohne das er sich noch mal ändert
Telemetry.Data -= Telemetry_Data;

        }
11.08.2019 13:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.054
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Auch ein Anfänger darf sich sehr gerne an die Forenregeln halten. Du bist schließlich auf der Suche nach Hilfe.
 [Hinweis] Wie poste ich richtig?
Stell Dir vor, jedes Thema würde hier "Verständnisfrage" heissen. Dass Du eine Frage hast; das ist klar - sonst wärste nicht hier. Daumen hoch

Dir ist ja auch selbst bewusst, dass der Titel quatsch ist - wieso machst es nicht gleich richtig?
Jetzt hab ich das für Dich angepasst; das muss ja aber nicht sein. :-)

KroaX hat aber den richtigen Hinweis gegeben; dass Du prinzipiell den Event einfach nicht mehr abonnierst.
Mit Reactive Extension gibts hierzu auch die Möglichkeit von Einmal-Subscriptions.

Sofern Null kein gültiger Wert ist kann man auch alternativ T-Virus' Vorschlag anwenden.

Edit: SCTelemetry hört sich allgemein nach Messaging an.
Und sowas lässt sich dann sehr gut via IMediatR und/oder Reactive Extensions kombinieren - wäre hier meine grundlegende Empfehlung.
Verwende ich in eigenen Projekten auch in diesem Stil.
11.08.2019 14:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Pat2381
myCSharp.de-Mitglied

Dabei seit: 11.08.2019
Beiträge: 2

Themenstarter Thema begonnen von Pat2381

Pat2381 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zu erst einmal viel dank an T-Virus und KroaX für den interessanten Hinweis.

JA Abt du hast zu 100% recht.. ich hätte mir da wirklich einen aussagekräftigeren Titel einfallen lassen müssen. Entschuldigung hier für.

Ich werde noch mal versuchen zu erklären, was ich genau vorhabe.

Im Grunde benötige ich einmal, den festen Wert und aber auch den Wert, der sich durch das Event ändert.
Mit diesen beiden Werten, möchte ich später weiter arbeiten und eine ProgessBar zum laufen bringen.

In data.IRGENDWAS, ist eine Zeitwert in Sekunden (z.b. 6436 sek. ) welcher auf Null runtergeht. Diesen Wert müsste ich dann später noch so Mappen, dass ich Ihn für die ProgressBar verwenden kann.

Ich werde mir nochmal die Vorschläge anschauen und gucken, ob ich da was hinbekomme.

pat2381
11.08.2019 15:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.054
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Pat2381:
Im Grunde benötige ich einmal, den festen Wert und aber auch den Wert, der sich durch das Event ändert.

Das ist widersprüchlich zum Eingangspost.
Dort sprichst Du nur von einem festen Wert, der sich nicht ändert.

Aber rein wenn man das Requirement mal auf Papier schreiben würde, dann hast Du eben zwei Variablen:
Statischer Wert, dynamischer Wert.

Ergo brauchst Du mindestens mal zwei Variablen, damit Du Deine Progressbar umsetzen kannst.
Das zeigt Dein Code aber nicht.
11.08.2019 15:42 Beiträge des Benutzers | zu Buddylist hinzufügen
KroaX KroaX ist männlich
myCSharp.de-Mitglied

avatar-4080.jpg


Dabei seit: 31.08.2009
Beiträge: 278
Herkunft: Köln


KroaX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Edit: SCTelemetry hört sich allgemein nach Messaging an.
Und sowas lässt sich dann sehr gut via IMediatR und/oder Reactive Extensions kombinieren - wäre hier meine grundlegende Empfehlung.
Verwende ich in eigenen Projekten auch in diesem Stil.

Kannst du das Szenario wie du das verwendet kombinierst mal ausführen? Würde mich interessieren. Hast du eine Komponente die Reactive Events schmeißt und du hast ne zentrale Stelle in deiner Anwendung welche die Pipeline abfragt und dann über mediations an die richtigen Stellen weiter delegiert oder wie kann man sich das vorstellen?
11.08.2019 16:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.054
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Prinzipiell ist das so, dass ich / wir generell vermeiden mit "legacy Events" zu arbeiten, sondern im Prinzip nur noch auf Event Sourcing setzen.
(Wir ist in meinem Fall entweder unsere internen Developer Teams oder Teams, die ich als Externer berate).

Für In-Process Anwendungen ist da das Maß der Dinge einfach im Cross .NET Bereich MediatR.
Damit kann man auch super insgesamt Events in Messages wrappen (Beispiel:  https://github.com/BenjaminAbt/Twitch.MediatR)

Das ist soweit der Logik-Part (in der Regel), denn MediatR an für sich hat keinen Store um einen State darzustellen.
Da kommt nun RX.NET ins Spiel, das die Requests/Notifications von MediatR konsumiert und so den State darstellt.

In diesem einfacheren Beispiel wäre es auch denkbar auf MediatR komplett zu verzichten und nur mit RX zu arbeiten.
In komplexeren (Software-)Architekturen ist jedoch meine Erfahrung, dass man mit dem Handler-Prinzip von MediatR für die IO- und Logikkommunikation besser fährt.

PS: ich hab mit Frontend-Anwendungen nicht viel zutun; Berate ja hauptsächlich im Bereich .NET Backend/ASP.NET Core + Co, Azure und AWS.
Dahingehend habe ich ohnehin eher selten Anwendungsfälle für RX.NET, weil eben In-Process State Management, was eher in UI bzw. Desktop-Anwendungen zum Einsatz kommt.
11.08.2019 16:51 Beiträge des Benutzers | zu Buddylist hinzufügen
KroaX KroaX ist männlich
myCSharp.de-Mitglied

avatar-4080.jpg


Dabei seit: 31.08.2009
Beiträge: 278
Herkunft: Köln


KroaX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Verstehe danke dir für den Einblick.
11.08.2019 17:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.10.2019 10:56