Was ist die richtige Technik ThreadA Signal ThreadB eines Ereignisses zu haben, ohne dass ThreadB sitzen blockiert warten auf ein Ereignis geschehen?.NET: Wie sind Hintergrund-Thread-Signal-Haupt-Thread-Daten verfügbar?
Ich habe einen Hintergrund-Thread, der eine geteilte Liste <T> füllen wird. Ich versuche einen Weg zu finden, asynchron dem "Haupt" -Thread zu signalisieren, dass Daten zur Verfügung stehen.
i als ein Ereignis mit einem Eventwaithandle-Objekt festlegen, aber ich kann mein Haupt-Thread sitzt an einem Event.WaitOne() nicht haben.
i als einen Delegaten Rückruf haben, aber a) ich will nicht den Haupt-Thread Arbeit in den Delegierten zu tun: der Faden muss wieder an die Arbeit, um mehr Sachen Zugabe - ich will es nicht warten, während der Delegat ausgeführt wird, und b) der Delegat muss auf den Haupt-Thread marshalled sein, aber ich habe keine Benutzeroberfläche, ich habe keine Kontrolle zu .Legen Sie den Delegaten gegen.
i betrachtet haben einen Delegierten Rückruf, der einfach startet einen Null-Intervall System.Windows.Forms.Timer (mit Gewinde Zugriff auf den Zeitgeber synchronisiert). Auf diese Weise der Faden muss nur geklebt werden, wie es
nenntTimer.Enabled = true;
aber das scheint wie ein Hack.
In den alten Tagen würde mein Objekt ein verstecktes Fenster erstellt haben und der Thread Nachrichten an diese versteckten Windows 'HWND senden. Ich überlegte, ein verstecktes Steuerelement zu erstellen, aber ich versichere, dass Sie nicht auf ein Steuerelement mit keinem Handle erstellen können. Außerdem habe ich keine Benutzeroberfläche: Mein Objekt könnte auf einem Webserver, einem Dienst oder einer Konsole erstellt worden sein, ich möchte nicht, dass ein grafisches Steuerelement erscheint - auch möchte ich keine Abhängigkeit von System.Windows kompilieren. Formen.
i betrachtet mein Objekt aussetzen eine ISynchronizeInvoke Schnittstelle, aber dann würde ich brauche .Invoke() zu implementieren, und das ist mein Problem.
Was die richtige Technik, um ein Signal Thread B eines Ereignisses zu haben Gewinde, ohne Gewinde B wartet blockiert sitzen mit für ein Ereignis geschehen?
die Background Klasse scheint das einzige zu sein, die asynchron eine Notificati gesendet werden auf den * Thread *, der das Objekt erstellt hat. Intern verwendet es das AsyncOperation-Objekt, indem es asyncOperation.Post() aufruft. –