socket通信问题
2021-01-06 本文已影响0人
108k
1、连接状态显示混乱
表现:有的断开了又显示连上,有的连上了又显示断开等
原因:查了一下,问题出在连接状态更新在另一个线程上,时间差导致的混乱。
解决:lock锁,只有在client!=null时才更新连接状态为连上。
代码:
public void Touch()
{
client = new BaoClient(plc.Ip, int.Parse(plc.Port));
client.connectEvent += new Action<string>(Connected);
client.recvMessageEvent += new Action<string>(Received);
client.Start();
}
public void Break()
{
client.CloseClientSocket();
lock (this)
{
client = null;
IsTouched = false;
}
}
void Connected(string key)
{
lock (this)
{
if (client != null)
this.IsTouched = true;
}
}