用户
 找回密码
 立即注册

23

主题

58

帖子

985

积分

高级会员

Rank: 4

积分
985
发表于 2019-6-30 23:24:40
各位专家,

请教一个问题。我想测试一段 连接服务器端数据库 的代码,想法是如果无法连到数据库,则报错,并执行指定的操作。代码示例如下:

           this.Client.HeartBeatEnable(1);
            try
            {
                Myconn = new MySqlConnection(svrConnStr);
                Myconn.Open();
            }
            catch
            {

                 // 错误捕获处理代码
            }

当我故意将连接数据库的参数给错时,会有一个长时间的连接请求,但这个时候 APP端直接出现了 “网络连接失败,请检查网络后点击重新加载”的 白屏页面,而没有再等待一段时间后进入程序的catch 部分。

如果设置断点到 catch 中,在APP上出现上述情况后,代码还是会跳转到断点处的。但APP上已经无法继续响应了。

我想了解这种情况出现的原因是什么? 有什么办法可以解决吗? 上例中,我试图使用 this.Client.HeartBeatEnable()的办法保持网络的通畅,但不起作用,不知道心跳包不是这样的用法,或者不是解决这个问题的方法。

请指教。
大杰米
使用道具 举报 回复
可以使用this.Form.ShowLoadingScreen("显示一个秒Loading", true);
当查询到数据时关闭loading,发送数据
this.Form.CloseLoadingScreen();
使用道具 举报 回复 支持 反对
Lula.Jin 发表于 2019-7-1 10:55
可以使用this.Form.ShowLoadingScreen("显示一个秒Loading", true);
当查询到数据时关闭loading,发送数据
...

Lula,

我在我的代码的前加了 this.Form.ShowLoadingScreen("加载中", true), 在代码后添加了 this.Form.CloseLoadingScreen(),  但还是一样的错误,数据库长时间连不上就报 网络连接失败。

不知道写法是不是向我这样的?
使用道具 举报 回复 支持 反对
那你的代码具体是怎么写的?   
try {
                con.Open();
            }
            catch {
                Toast("fff");
            }
这样想这样写的话catch到异常之后就执行toast了,没有出现你说的网络连接失败
         
使用道具 举报 回复 支持 反对
发表于 2019-7-3 22:55:02
Lula.Jin 发表于 2019-7-2 17:37
那你的代码具体是怎么写的?   
try {
                con.Open();

Luna,

我的现象就是 con.Open() 长时间不响应,但并没有触发 catch 中的代码,而是直接出现 “网络连接失败,请检查网络后点击重新加载”的 白屏页面。

下面是我的代码:

           this.Form.ShowLoadingScreen("Loading", true);
           
            try
            {
                Myconn = new MySqlConnection(Common.svrConnStr);
                Myconn.Open();
            }
            catch
            {
                this.Form.CloseLoadingScreen();
                Myconn.Close();
                Toast("Could not connect to Mysql server.");
            }

其中 this.Form.ShowLoadingScreen()  和  this.Form.CloseLoadingScreen() 是我按照你说的,然后自己放置的内容,不确定是否是这么用。

上面Try中的内容,我是故意将MySQL的服务IP写错,希望模拟无法连接MySQL服务器的情况,结果并没有进入catch块中。(但如果是单步调试,是可以进的去的,所以我认为是由于连接尝试时间过长导致的)

谢谢
大杰米
使用道具 举报 回复 支持 反对
发表于 2019-7-4 10:42:03
上一条中代码应该没有问题的,除非有使用心跳检测。
若使用的话failCounter参数设置0,即不限制心跳检测失败次数。还有看到之前你有设置this.Client.HeartBeatEnable(1);其中interval心跳间隔(毫秒)参数设置为1(过小)建议修改为1000
使用道具 举报 回复 支持 反对
发表于 2019-7-6 23:29:27
peter.pan 发表于 2019-7-4 10:42
上一条中代码应该没有问题的,除非有使用心跳检测。
若使用的话failCounter参数设置0,即不限制心跳检测失 ...

按照您的建议重新设置了this.Client.HeartBeatEnable()之后正常了。非常感谢!
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册