关于消息提示框(MessageBox)引起的一个奇怪的错误

原先以为消息提示框(MessageBox)就是弹出一个通知而已,对程序并没有什么影响。结果因为这个观点,程序调了好久...

代码如下:

case LOGOK:
{
       this.DialogResult = DialogResult.OK;
       MessageBox.Show(msgArgs.message);
       break;
}
即,在登录成功之后,会弹出一个消息提示框,通知登录成功消息,并将登录窗体的DialogResult设置为OK,进而弹出主界面

问题:

刚开始的时候貌似并没有什么影响,后台程序也运转正常,只是有一点:当服务器发送过来在线用户的消息收不全。

如服务器发送了676Bytes,而只接收到570Bytes

追查原因:

(1) 受到MTU的限制

如果MTU限制为570Bytes的话,确实也可能出现这种状况

打开命令行cmd,输入如下命令:

ping -f -l 570 10.25.18.254

其中: 570为数据包字节数;10.25.18.254是网关地址

运行结果如下:

Pinging 10.25.18.254 with 570 bytes of data:


Reply from 10.25.18.254: bytes=570 time=1ms TTL=255
Reply from 10.25.18.254: bytes=570 time=1ms TTL=255
Reply from 10.25.18.254: bytes=570 time=1ms TTL=255
Reply from 10.25.18.254: bytes=570 time=1ms TTL=255


Ping statistics for 10.25.18.254:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 1ms, Maximum = 1ms, Average = 1ms

可见,570字节并没有必要分包,因此可知,不是MTU的问题

(2) 为了确保服务器端发送了全部在线用户列表,也进行了调试,没什么问题

(3) 因为发送的时候是把全部在线用户信息都发送过来,可能造成数据包太大(如果在线用户很多时)。

所以发送在线用户时,改为逐个发送

结果也一样,所以不是这个问题

(4) 实在没办法,偶然的删掉了弹出的消息提示框,发现竟然好了

同时运行了几个客户端,发现没有问题

原因分析:

说实话,不太明白其中的原因...

消息提示框是模态窗口,确实是会阻塞一些东西。但是后台程序应该是相对独立的,不会导致接收到的bytes与服务器发送过来的bytes不符呀...

如果是需要显示的话,比如接收到用户在线消息,但是没有进行显示,这个倒是可能的。

但是,这种的错误,太难解释了...

解决办法:

为了防止类似的问题出现,以后会谨慎使用MessageBox,而使用控制台输出来进行相应的调试


你可能感兴趣的:(调试,UI)