我正在编写客户端 - 服务器通信器。 现在我达到了我不知道该怎么做的地步。所以......
在我的客户端我有2个帖子。 在这2个线程中,我在一个线程中使用相同的BinaryReader-例如在添加新联系人时和在第二个线程中使用无限循环(等待来自服务器的新消息)。
当我添加联系人时,我的应用程序无法正常工作,因为分离线程中的BinaryReaders正在交替阅读回复。
我意识到我必须使用互斥锁。
这是我的client.class代码:
添加联系人:
bw.Write((int)Codes.AddContact);
bw.Write(login);
mutex.WaitOne();
int ans = br.ReadInt32(); // waiting for 'ok'
mutex.ReleaseMutex();
第二个线程(无限循环):
while (logged)
{
mutex.WaitOne();
var action = (Codes)br.ReadInt32(); //stucks here
dp.Handle(action, bw, br);// dispatcher
mutex.ReleaseMutex();
}
现在我的问题是这一行:
var action = (Codes)br.ReadInt32();
无限期等待服务器的某些消息,互斥锁处于等待状态,因此当我尝试添加新联系人时,我的客户端冻结在这里:
mutex.WaitOne();
有没有办法打断这个阅读,或者你知道更好的解决方案吗?
提前致谢。