我有一个回调函数,在其中我尝试写入我在重写的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);
}
}
被覆盖的ReadAsync()如下所示。
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;
}
我想要实现的是在XmlReader解析网络流之前监控它。这与我的另一个问题有关 > 同时从同一SslStream读取? <。我该怎么做?
更新:
实际上是
Encoding.UTF8.GetString(bytes)
阻塞了应用程序。为了让问题更完整,我列出了读取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:
...
bytes.ToString()
而不是Encoding.UTF8.GetString(bytes)
,或者我错过了一些基础知识吗? - MalachiToString()
产生的System.Byte[]
呢? - Tony StarkConsole.ReadKey
或Console.ReadLine
)? - Jim Mischel