c#从流继承,二进制编写器工作,流编写器不工作
我创建这个对象是为了使用TcpClient将API从.net移植到silverlight。它是使用套接字和流上的读写器编写的。碰巧API使用的是二进制读写器,所以一切正常。但是在测试时,StreamWriter似乎在编写时不调用OnWrite委托。我很好奇是否有人能解释这件事 实际上,这个类的唯一功能是OnRead&OnWrite,当对流进行读或写操作时调用它。在我的情况下,他们把工作传给插座c#从流继承,二进制编写器工作,流编写器不工作,c#,silverlight,sockets,C#,Silverlight,Sockets,我创建这个对象是为了使用TcpClient将API从.net移植到silverlight。它是使用套接字和流上的读写器编写的。碰巧API使用的是二进制读写器,所以一切正常。但是在测试时,StreamWriter似乎在编写时不调用OnWrite委托。我很好奇是否有人能解释这件事 实际上,这个类的唯一功能是OnRead&OnWrite,当对流进行读或写操作时调用它。在我的情况下,他们把工作传给插座 public class NotifyStream:Stream { public deleg
public class NotifyStream:Stream
{
public delegate int ReadDelegate (byte[] buffer, int offset, int count);
public delegate void WriteDelegate(byte[] buffer, int offset, int count);
public ReadDelegate OnRead;
public WriteDelegate OnWrite;
public override void Flush()
{
// TODO: Implement this method
//throw new NotImplementedException();
}
public override long Seek(long offset, SeekOrigin origin)
{
// TODO: Implement this method
return 0;
}
public override void SetLength(long value)
{
// TODO: Implement this method
// throw new NotImplementedException();
}
public override int Read(byte[] buffer, int offset, int count)
{
// TODO: Implement this method
if (OnRead != null)
{
return OnRead(buffer, offset, count);
}
else
{
return 0;
}
}
public override void Write(byte[] buffer, int offset, int count)
{
// TODO: Implement this method
if (OnWrite != null)
{
OnWrite(buffer, offset, count);
}
}
public override bool CanRead
{
get
{
// TODO: Implement this property getter
return true;
}
}
public override bool CanSeek
{
get
{
// TODO: Implement this property getter
return false;
}
}
public override bool CanWrite
{
get
{
// TODO: Implement this property getter
return true;
}
}
public override long Length
{
get
{
// TODO: Implement this property getter
return 1024;
}
}
public override long Position
{
get
{
// TODO: Implement this property getter
return 0;
}
set
{
// TODO: Implement this property setter
//throw new NotImplementedException();
}
}
}
StreamWriter
有一个内部缓冲区,它在写入流之前填充该缓冲区
在编写器上调用
Flush()
。请显示一个简短但完整的程序来演示问题。还强烈考虑使用事件而不是公共委托字段。流写器具有AutoFlush属性。它默认为false。这意味着您必须自己明确地冲洗它,而不是关闭或处理它。将其设置为true,然后重试。