Ho una funzione di callback in cui sto cercando di scrivere i dati che ho letto in un ReadAsync() sovrascritto.Perché Console.WriteLine() blocca in callback da Stream.ReadAsync()?
private void StreamCallback(byte[] bytes)
{
Console.WriteLine("--> " + Encoding.UTF8.GetString(bytes)); // the whole application is blocked here, why?
if (OnDataReceived != null)
{
string data = Encoding.UTF8.GetString(bytes);
OnDataReceived(data);
}
}
Il sovrascritto ReadAsync() ha il seguente aspetto.
public override async Task<int> ReadAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken)
{
var read = await _originalStream.ReadAsync(buffer, offset, count, cancellationToken);
_readCallback(buffer);
return read;
}
Quello che in realtà voglio raggiungere è quello di monitorare un flusso di rete poco prima che venga analizzata da un XmlReader. Questo si riferisce alla mia altra domanda>Reading from same SslStream simultaneously? <. Come potrei farlo?
UPDATE:
In realtà è Encoding.UTF8.GetString(bytes)
che blocca l'applicazione. Affinché la domanda sia più completa, sto elencando il codice per leggere lo stream XML.
using (XmlReader r = XmlReader.Create(sslStream, new XmlReaderSettings() { Async = true }))
{
while (await r.ReadAsync())
{
switch (r.NodeType)
{
case XmlNodeType.XmlDeclaration:
...
break;
case XmlNodeType.Element:
...
perché non provi 'bytes.ToString()' invece di 'Encoding.UTF8.GetString (bytes)' o mi mancano alcune nozioni di base qui? – Malachi
@Malachi: Cosa dovrei fare con 'System.Byte []' (che è prodotto da 'ToString()') allora? –
Non sono sicuro di seguire ciò che dovrebbe essere fatto qui. il 'Console.WriteLine()' dovrebbe semplicemente scrivere il 'byte []' così dicendo di stampare l'equivalente di 'byte []' come 'char []' non dovrebbe cambiare quello che stai facendo lì? il tuo 'OnDataRecieved' dovrebbe probabilmente prendere un' byte [] 'e non una stringa (' char [] ') è ciò che sto pensando. Potrei sbagliarmi. Sto solo cercando di capire cosa sta succedendo esattamente – Malachi