Event in Thread empfangen



  • Hallo Leute,

    Ich weiß, es gibt "AutoResetEvent" und "ManualResetEvent". Was aber, wenn der Event aus einer Klasse kommt, die ich nicht kontrolliere. Ich habe ein externes Einagabegerät. Der erzeugt einen Event, den ich auch in einer Form verarbeiten kann. Nun habe ich mehrere Forms, die auf dieses Einagbegerät angewiesen sind, aber eben immer nur eine. Die Steuerung bekomme ich im Thread hin, da ich für jede Form einen eigenen Event erstelle und immer entsprechend den richtigen aufrufe. Aber ich weiß nicht, wie ich den Event vom Eingabegerät (Scanner) verarbeitehn soll.

    In der Form schreibe ich:

    2DImager = new Imager();
    2DImager.GoodReadEvent += new LaserEventHandler(this.Imager_GoodReadEvent);
    

    Dazu dann noch die Funktion die es verarbeitet und alles ist OK. Das kann ich in einem Thread aber doch nicht machen oder? In der C++ Zeit habe ich "WaitForSingleObject()" benutzt. Ich hab aber derzeit keine Ahnung, wie ich den vorhandenen Eventhandler (siehe Code) mit einem AutoResetEvent() verknüpfen könnte.
    Kann mir da jemand helfen?

    VG
    Ranger



  • Warum meinst du denn, hier überhaupt einen Thread verwenden zu müssen?



  • @Glasgow_Ranger
    Ich fürchte mir ist vollkommen unklar was du eigentlich machen willst und womit genau du nun ein Problem hast.



  • Ich versuch mal etwas genauer zu beschreiben.

    Es geht um einen Scanner, der Barcodes einliest. Der Hersteller leifert ne SDK für CE. Damit kann ich ein Objekt in eine Form ziehen und mit einem Event die Daten in der Form erhalten und bearbeiten.
    Jetzt habe ich aber mehrere Forms, die Daten vom Scanner erhalten sollen und das ganze unterschiedlich behandeln sollen. Ich kann aber nicht mehrere Objekte auf den gleichen Scanner anlegen. Es bekommt immer nur die 1. Form die Daten weil ich dort den Event angemeldet habe. Habe auch schon versucht den Event immer wieder abzumelden, wenn ich in eine andere Form wechsle.

    anmelden des Events:

    sammelImager.GoodReadEvent += new ScannerEngine.LaserEventHandler(this.sammelImager_GoodReadEvent);
    

    abmelden des Events:

    sammelImager.GoodReadEvent -= this.sammelImager_GoodReadEvent;
    

    Der Compiler nimmt das zwar, aber es scheint nicht korrekt zu funktionieren.

    Aus diesem Grund habe ich versucht das Einlesen und Entgegennehmen der Daten in einem Thread zu realisieren, der dann den Text an die jeweils aktuelle Form weiterreicht. So habe ich das in der C++ Welt mit eigenen Messages abgehandelt.

    VG
    Ranger



  • Nun der einfachste Weg der mir einfällt wäre, eine Klasse zu basteln die den Scanner noch einmal Kapselt. Dort stellst du ein Event bereit was im Grunde nur das Event des Scanners weiterleitet.

    Wird nun das Event des Scanners geworfen, kannst du dein eigenes Event auslösen und alle Objekte die das Event aboniert haben können entsprechend reagieren.

    Ich kann mir allerdings beim besten Willen nicht vorstellen, dass das Event des Scanners nur den ersten Abonenten informiert. Nutzt du tatsächlich immer die gleiche Instanz des Scanners oder hast du in den einzelnen Forms jeweils eine eigene Instanz? Das solltest du natürlich vermeiden.


Anmelden zum Antworten