2个线程中的二进制读取器和无限循环c#

时间:2017-05-20 12:31:02

标签: c# multithreading binaryreader

我正在编写客户端 - 服务器通信器。 现在我达到了我不知道该怎么做的地步。所以......

在我的客户端我有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();

有没有办法打断这个阅读,或者你知道更好的解决方案吗?

提前致谢。

0 个答案:

没有答案