2009-09-30 4 views
1

Un DataSet sait comment sérialiser un flux via WriteXml().Comment puis-je connecter un objet nécessitant un flux accessible en écriture à un objet qui souhaite un flux lisible?

J'ai un objet qui veut un flux lisible. Comment puis-je connecter le DataSet à cet autre objet?

L'analogie de plomberie: supposer un 1/2" tube en cuivre possède un « mâle » sortie, et une soupape possède également un « raccord mâle » pour relier les deux je besoin d'un adaptateur - femelle aux deux extrémités

..

J'imagine une classe AdapterStream qui est multi-thread, le flux est implémenté en interne avec un tampon fixe, disons 8kbytes.En un thread j'appelle WriteXml() en utilisant une instance de cet AdaterStream. Write() dans le flux jusqu'à ce que ce soit fait, mais AdapterStream se bloque lorsque le tampon est plein et attend jusqu'à ce que le tampon soit drainé via un appel à Read() Dans un thread séparé, l'application appelle Read() sur ce AdapterStream renvoie 0.

Si le tampon est vide cela ne signifie pas que Read() peut retourner zéro. Il ne peut retourner que zéro lorsqu'un EOF est signalé par le côté écriture. (peut-être avec une méthode Close() ou WriteEof()).

Vous auriez besoin d'un ManualResetEvent à utiliser pour signaler entre Write() et Read().

Ce ne serait pas trop difficile à écrire. Mais, une telle chose existe-t-elle?

Quelque chose comme the BlockingStream Stephen Taub provided in MSDN Magazine, sauf sans l'allocation de mémoire tampon illimitée.

Répondre

Questions connexes