一则由于Dns.GetHostName引起的奇异问题

为什么80%的码农都做不了架构师?>>>一则由于Dns.GetHostName引起的奇异问题
文章图片

【一则由于Dns.GetHostName引起的奇异问题】一个C#程序有多个MDI窗口组成,以前在Win7上开发没遇到问题,但后来在win10上继续开发的时候,出现奇异的现象,即其中的一个窗口(暂且叫A吧)Show出来的时候会造成程序崩溃,显示“尝试读取或写入受保护的内存 这通常指示其它内存已损坏”,但又不是每次都出这样的问题。后来发现规律为:主窗口显示出来之后,如果第一个弹出来的是A窗口,则没有问题,如果先弹出别的窗口,则99%的几率程序崩溃。
A窗口自带Form_Load方法,屏蔽掉里面的内容之后问题消失。改为Shown仍然无法改观。逐段屏蔽代码最后发现,造成程序崩溃的语句是Dns.GetHostName()。这不是程序启动后第一次调用该方法。主窗口Load的时候也已经掉用过该方法了,用于启动一个本地监听Socket,但主窗口的调用没出问题。
由于为什么第一个打开的子窗体是A就不会出错,而先打开别的再打开A就会造成程序崩溃无从探知。
百度知道上有一个专业回答似乎在理,但无从考究和证实,链接在这里:http://zhidao.baidu.com/question/200644340.html

由于第一次调用没出问题,后面出问题的是第二次调用甚至是第N次调用结果会出问题,那么绕开似乎也是一个不错的选择。
解决方法是,在一个单例实体中保存第一次调用该方法的结果,然后在后面需要使用该结果的时候,直接从该单例实体中获取。结果程序恢复正常。
代码略。

问题究竟在何处呢?盼望高手不吝赐教,谢谢。



转载于:https://my.oschina.net/smzd/blog/543025

    推荐阅读