Ich habe einen verwalteten Thread, der wartet, blockiert, in einem nicht verwalteten Code (insbesondere bei einem Aufruf von NamedPipeServerStream.WaitForConnection(), die schließlich in unmanaged Code ruft, und bietet nicht bieten ein Timeout).Wie kann ein verwalteter Thread, der in nicht verwaltetem Code blockiert ist, beendet werden?
Ich möchte den Thread sauber zu schließen.
Thread.Abort() hat keine Auswirkungen, bis der Code in den verwalteten Bereich zurückkehrt, was nicht möglich ist, bis ein Client eine Verbindung herstellt, auf die wir nicht warten können.
Ich brauche einen Weg "Schock" aus dem nicht verwalteten Code; oder eine Möglichkeit, den Faden zu töten, selbst wenn er sich in unkontrolliertem Land befindet.
Warum benutzen Sie nicht NamedPipeServerStream.BeginWaitForConnection() statt? – SpaceghostAli
Grundsätzlich, weil der Thread "für immer" auf eine Verbindung warten will (außer beim Herunterfahren). Mit Begin/End WaitForConnection müsste ich beginnen, eine Sekunde warten, nach einer Verbindung oder einem Timeout suchen und eine Schleife nach dem Timeout durchführen. –
Ok, ich verstehe es. Nun, eine kleine Änderung an der Antwort von dtb sollte Ihnen geben, was Sie brauchen. Warten Sie nicht auf asyncResult, sondern warten Sie auf ein freigegebenes WaitHandle, das Sie über den Code festgelegt haben, der den Thread abbrechen soll. – SpaceghostAli