Ho un thread di lavoro nella mia applicazione che è responsabile di tre cose diverse. Le richieste per due dei lavori vengono visualizzate in code che ho scritto, l'altro lavoro viene attivato quando viene visualizzata una richiesta su un flusso di rete. Vorrei che il mio thread di lavoro attenda quando non c'è lavoro da fare. Questo è facile con le due code in quanto espongono un oggetto ManualResetEvent impostato quando dispongono di elementi, tuttavia il NetworkStream non sembra avere questo. NetworkStream è stato recuperato da un TcpClient.Come si aspetta che un flusso di rete abbia i dati da leggere?
Quello che cerco è il codice che sembra qualcosa di simile:
while (notDone)
{
WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStream.HasData });
// ...
if (netStream.DataAvailable)
{
netStream.Read(buffer, 0, 20);
// process buffer
}
}
Qualcuno sa un modo per ottenere un WaitHandle che viene impostato quando un NetworkStream ha dati?
E 'possibile ottenere il BeginRead a leggere zero byte? –
Se l'host remoto interrompe la connessione e non ci sono più dati disponibili, verranno letti 0 byte. Perché lo chiedi? – SpaceghostAli
Se non riesci a leggere BeginRead a zero byte, devi iniziare a gestire il buffer di lettura tra il loop principale e la richiamata. Questo è totalmente fattibile ma non è bello come vorrei. –