Aşırı okunur bir ReadAsync() dosyasında okuduğum verileri yazmaya çalıştığım bir geri arama işlevim var.Console.WriteLine(), Stream.ReadAsync() öğesinden geri aramada neden engelleniyor?
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);
}
}
Aşırı okunur ReadAsync() aşağıdaki gibi görünüyor. Aslında elde etmek istiyorum ne
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;
}
bir XmlReader tarafından ayrıştırılır alır hemen önce bir ağ akışı izlemektir. Bu, diğer sorumu>Reading from same SslStream simultaneously? < ile ilgilidir. Bunu nasıl yaparım?
GÜNCELLEME:
Aslında uygulamayı engelliyor Encoding.UTF8.GetString(bytes)
olduğunu. Sorunun daha eksiksiz olması için XML akışını okumak için kod listeleme yapıyorum.
using (XmlReader r = XmlReader.Create(sslStream, new XmlReaderSettings() { Async = true }))
{
while (await r.ReadAsync())
{
switch (r.NodeType)
{
case XmlNodeType.XmlDeclaration:
...
break;
case XmlNodeType.Element:
...
Neden "Encoding.UTF8.GetString (bytes)" yerine bytes.ToString() 'ı denemiyorsunuz veya bazı temel bilgileri burada mı kaçırıyorum? – Malachi
@Malachi: "ToString()") tarafından üretilen System.Byte [] 'ile ne yapmalıyım? –
Burada yapılması gerekenleri takip ettiğimden emin değilim. 'Console.WriteLine()' sadece byte [] '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'eşdeğerini yazdırmak için söyledikten sonra yazmanız gerekir. 'OnDataRecieved', muhtemelen bir bayt [] 'almalı ve bir dize (' char [] ') değil, benim düşündüğüm şey olmalıdır. Çok yanlış olabilirim. tam olarak ne olduğunu anlamaya çalışmak – Malachi