2011-07-27 7 views
5

Je me demande comment arrêter Networkstream.Read() de bloquer le fil. J'ai un thread séparé où NetworkStream.Read() attend des données du serveur. Supposons que l'utilisateur appuie sur un bouton qui envoie des données au serveur. Mais je ne peux pas appeler NetworkStream.Write() alors qu'il y a NetworkStream.Read() dans un autre thread en attente de données. Je peux verrouiller NetworkStream chaque fois, mais NetworkStream.Read() bloquera le fil de sorte que je ne peux pas envoyer de données jusqu'à ce que lu au moins 1 octet.C# NetworkStream write() et read()

Répondre

0

La classe NetworkStream fournit des méthodes pour envoyer et recevoir des données sur les prises de flux en mode blocage. Pour plus d'informations sur le blocage par rapport Sockets bloquantes, voir Using an Asynchronous Client Socket

7

Vous pouvez émettre deux read et write en même temps comme indiqué dans la documentation à MSDN docs

lecture et d'écriture peuvent être effectuées simultanément sur une instance de NetworkStream classe sans avoir besoin de synchronisation. Tant qu'il y a un thread unique pour les opérations d'écriture et un thread unique pour les opérations de lecture, il n'y aura pas d'interférence croisée entre les threads de lecture et d'écriture et aucune synchronisation n'est requise.

2

Vous pouvez interroger la propriété NetworkStream.DataAvailable à certaines périodes et lire uniquement si elle est vraie. "Si DataAvailable est true, un appel à Read retourne immédiatement." Donc vous ne bloquerez pas le flux.

Questions connexes