当我无法访问Mysql服务器IP时,winform GUI冻结

问题描述

我正在从事有关数据采集的项目。我通过RasPi3b +从机器获取数据。数据保存在Raspi服务器上的MysqL中。为了跟踪数据,我使用C#winforms创建了一个dashborad。有时机器已关闭,我无法访问MysqL服务器。发生这种情况时,winforms将冻结。我不希望它冻结(也许绿色指示灯变成红色,但它不应该影响GUI)。我该如何解决

这是我的计时器代码,每2秒触发一次。

 private void timer1_Tick(object sender,EventArgs e)
    {
        for (int i = 0; i < (IpAndNames.Count ); i++)
        {
            string today = DateTime.Now.ToString("yyyy-MM-dd");
            _lblListOpen[i].Text = "open: " + _machineDal.SpenTime(today,IpAndNames[i].Ip,"Logs","Machine","open").ToString();
            _lblListClose[i].Text = "close: " + _machineDal.SpendTime(today,"close").ToString();

            string lastState = _machineDal.LastDateAndState(IpAndNames[i].Ip,"Logs").LastState;
            DateTime lastTime = _machineDal.LastDateAndState(IpAndNames[i].Ip,"Logs").LastDate;

            TimeSpan spendTime= DateTime.Now - lastTime;
            _lblListWorkingTime[i].Text = lastState +" "+ spendTime.ToString("h'h 'm'm 's's'");

        }
    }

这是我的数据层代码

 public TimeSpan SpendTime(string date,string ip,string tableName,string db,string state)
    {
        TimeSpan openTime= new TimeSpan(0,0);
        string connString = "server=" + ip + ";user=root;database=" + db + ";port=3306;password=root;Connection Timeout=1";
        try
        {
            using (_conn = new MysqLConnection(connString))
            {
                string query = "SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time ) ) ) AS timeSum FROM " + tableName + " " +
                "WHERE Laststate='" + state + "' " +
                "and date like \"" + date + "%\"";
                using (MysqLCommand cmd = new MysqLCommand(query,_conn))
                {
                    _conn.open();
                    using (MysqLDataReader reader = cmd.ExecuteReader())
                    {
                        reader.Read();
                        if (!reader.Isdbnull(0))
                        {
                           openTime= reader.GetTimeSpan(0);
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
        return openTime;
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)