Ho un thread gestito che è in attesa, bloccato, in un codice non gestito (in particolare, su una chiamata a NamedPipeServerStream.WaitForConnection() che chiama in modo superfluo nel codice non gestito e fa non offre un timeout).Come terminare un thread gestito bloccato nel codice non gestito?
Voglio chiudere il thread in modo ordinato.
Thread.Abort() non ha alcun effetto fino a quando il codice non ritorna al dominio gestito, che non eseguirà finché un client non effettua una connessione, che non possiamo attendere).
Ho bisogno di un modo per "scioccarlo" dal codice non gestito; o un modo per uccidere il filo anche mentre si trova in una terra non gestita.
Qualsiasi motivo per cui non stai utilizzando NamedPipeServerStream.BeginWaitForConnection()? – SpaceghostAli
Fondamentalmente perché il thread vuole aspettare "per sempre" per una connessione (a meno che non si arresti). Con Begin/End WaitForConnection, dovrei iniziare, attendere un secondo, verificare la connessione o il timeout e interrompere il timeout. –
Ok ho capito. Beh, una leggera modifica alla risposta di dtb dovrebbe darti quello che ti serve. Invece di aspettare su asyncResult, aspetta su un WaitHandle condiviso che imposti dal codice che vuole interrompere il thread. – SpaceghostAli