前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >死循环的妙用

死循环的妙用

原创
作者头像
谭广健
修改2019-11-21 17:44:56
1.7K0
修改2019-11-21 17:44:56
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

做开发写程序,最麻烦就是写循环。一个程序功能里面如果多于5个循环的,那么要么这个业务逻辑有问题,要么就是开发的人太Yang。用5个循环去做一个业务逻辑,耗时耗资源不说;假设其中有个死循环那就死翘翘了。

但是有时候死循环也有他的妙用,就像我接手的一个用wpf写的程序;客户反馈说程序容易卡死或点击没反应甚至根本没法进入程序。。首先看了一下程序,里面光循环就N多个,然后再不同的业面跳转。。还有WPF因为是坐标定位,所以一不小心就会定位错误,,唉。。但这些问题都不是这次的主问题,主问题是为什么会卡死没反应。。经过一轮问题复现测试后,发现是由于网络不联通导致的。问题找到那就解决吧,在执行相关的业务逻辑前,先判断一下网络是否可用,可用就执行,不可用就提示到可用为止。

于是就先从程序运行前进行网络的检测调用。。网络检测的代码如下:

代码语言:javascript
复制
  #region 检测网络状态
        bool CheckNET(String ip, int port)
        {
            bool b = false;

            IPEndPoint point = new IPEndPoint(IPAddress.Parse(ip), port);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                socket.Connect(point);
                b = true;
            }
            catch
            {
                b = false;
            }
            finally
            {
                socket.Close();
            }
            return b;
        }
        #endregion
        #region 提示框 自动关闭
        [DllImport("user32.dll")]
        public static extern int MessageBoxTimeoutA(IntPtr hWnd, string msg, string Caps, int type, int Id, int time);//引用DLL
       #endregion

到关键了,我们怎么通过这个网络函数进行调用。。代码如下

代码语言:javascript
复制
 for (; ; )
            {
                if (CheckNET("8.8.8.8", 80))
                {
                    break;
                }
                else {
                    MessageBoxTimeoutA((IntPtr)0, "当前网络不通", "网络异常", 0, 0, 3000);//30秒后自动关闭                    
                }
                Thread.Sleep(1000);
            };

for(;;)为死循环,就是不断的执行,当检测到网络通的时候,跳出死循环。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档