读书人

异步写数据解决方法

发布时间: 2012-03-08 13:30:13 作者: rapoo

异步写数据
我的 往流中写数据 代码如下: 求大神帮我看看我的思路是否正确?? (异步)
自己测试了下,是有问题的,一直在发送最后一次的消息。(原意想 有消息发,无消息等待)
要不要定义一个事件

_SendThread = new Thread(new ThreadStart(SendProcess));
...

private void SendProcess()
{
lock(networkStream)
{
//创建异步写入委托
networkStream.BeginWrite(sendBuf,0,sendBuf.length,new AsyncCallback (WriteData),networkStream);
}
}

private void WriteData( IAsyncResult iAsyncResult )
{
IAsyncResult ar = (IAsyncResult)iAsyncResult;

String msg = null;
lock (_sendPool.SyncRoot)
{
if (_sendPool.Count() > 0)
msg = _sendPool.Dequeue();
else
Thread.Sleep(1000); //这一句 不妥..
}
if (msg != null)
{
_sendBuf = Encoding.ASCII.GetBytes(msg);
networkStream.EndWrite(ar); //这一句 位置是否正确??
}

lock(networkStream) //调用自身,完成无限循环
{
networkStream.BeginWrite(_sendBuf, 0, _sendBuf.Length, new AsyncCallback(WriteData), networkStream);
}
}



[解决办法]
你这样写怪怪的~

用一个线程检查队列,如果>0,在调用BeginWrite

不要在callback里面去sleep,去判断,放到SendProcess里面

读书人网 >C#

热点推荐