Event innerhalb eines Threads abrufen



  • Hallo zusammen,

    ich muss innerhalb eines Threads auf einen Event reagieren. In C++ hätte ich das mit

    WaitForMultipleObject()
    

    gemacht. Kann mir jemand das Gegenstück in C# geben? Ich benötige ja eine Funktion in der Threadklasse, die dauerhaft arbeitet, also kann ich keine eigenen OnEvent() Funktion erstellen.
    Ich habe bereits die WaitHandle Klassen angeschaut und da muss man den Event mit einem Set() setzen. Das wäre aber nur Hilfreich, wenn ich Zugriff auf den äußeren Thread hätte, der is aber abseits meines Zugriffs. Es handelt sich um die SDK Klassen eines Eingabegerätes, an die man einen Event binden kann und auf den man dann im Dialog warten kann. Also habe ich keine Möglichkeit das zu setzen, zumindest wie ich es bislang sehe. Gibt es da doch Möglichkeiten?

    Viele Grüße und Danke
    Ranger



  • Ich verstehe dein Problem nicht ganz. - Was passiert innerhalb deines Threads? In wiefern muss dein Thread auf das Event reagieren?

    Wenn dein Thread sowieso auf das Event warten soll, wieso dann überhaupt einen eigenen Thread? Passieren da größere Sachen die einen Thread bedingen?

    Eventuell hilft dir ja der Ansatz, ein boolsches Feld zu verwenden, dass du nach dem Event auf "true" setzt. In deinem Thread wartest du solange es false ist und setzt es während der Ausführung auch wieder von "true" auf "false". Ein anderer Weg fällt mir da derzeit nicht ein, wenn der Thread wirklich solang warten soll bis das Event gefeuert wird.

    In wiefern brauchst du Zugriff auf einen äußeren Thread? Wenn ich dich verstanden habe, läuft doch der SDK Thread untergeordnet zu deinem.

    // EDIT:
    Mit dem EventWaitHandle brauchst du nach draußen keine Zugriffe?

    EventWaitHandle _waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
    
    private void MyThread()
    {
       // ...
       // some stuff
    
       // warten
       this._waitHandle.WaitOne();
       // zurücksetzen
       this._waitHandle.Reset();
       // ...
       // some other stuff
    }
    
    private void OnMyEvent(Object sender, EventArgs e)
    {
       // event wurde geworfen
       // waithandle setzen
       this._waitHandle.Set();
    }
    

Log in to reply