c#从流继承,二进制编写器工作,流编写器不工作

c#从流继承,二进制编写器工作,流编写器不工作,c#,silverlight,sockets,C#,Silverlight,Sockets,我创建这个对象是为了使用TcpClient将API从.net移植到silverlight。它是使用套接字和流上的读写器编写的。碰巧API使用的是二进制读写器,所以一切正常。但是在测试时,StreamWriter似乎在编写时不调用OnWrite委托。我很好奇是否有人能解释这件事 实际上,这个类的唯一功能是OnRead&OnWrite,当对流进行读或写操作时调用它。在我的情况下,他们把工作传给插座 public class NotifyStream:Stream { public deleg

我创建这个对象是为了使用TcpClient将API从.net移植到silverlight。它是使用套接字和流上的读写器编写的。碰巧API使用的是二进制读写器,所以一切正常。但是在测试时,StreamWriter似乎在编写时不调用OnWrite委托。我很好奇是否有人能解释这件事

实际上,这个类的唯一功能是OnRead&OnWrite,当对流进行读或写操作时调用它。在我的情况下,他们把工作传给插座

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,然后重试。