关于断网的问题程序如何判断!!在线等!

lulu_xiaoniu 2008-12-29 07:44:53
我现在开发一个用timer控件每2秒检索一次远程数据库,但是中途如果网线断了或是网络中断,程序就抛出N个窗体,异常内容如下:
“在从服务器接收结果时发生传输级错误。”

这个提示,我在网上找原因就是由于网络中断造成的。

请高手指教,winform如何能避免这个问题?

请高手指教代码!
...全文
301 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈潜伏哥 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 SSXYC 的回复:]
搞个全局变量,比如说布尔型的,是false就抛,抛了一次就true,如果检测到网络通了就变false
[/Quote]

好代码,经典。
marvelstack 2009-04-24
  • 打赏
  • 举报
回复
使用NetworkChange类的NetworkAvailabilityChanged 事件,


static void Main(string[] args)
{

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged += new System.Net.NetworkInformation.NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged);

}

static void NetworkChange_NetworkAvailabilityChanged(object sender, System.Net.NetworkInformation.NetworkAvailabilityEventArgs e)
{
bool ok = e.IsAvailable;
if (ok)
{
//网络正常
}
else
{
//网络异常
}
}


SSXYC 2009-04-24
  • 打赏
  • 举报
回复
搞个全局变量,比如说布尔型的,是false就抛,抛了一次就true,如果检测到网络通了就变false
lulu_xiaoniu 2009-01-01
  • 打赏
  • 举报
回复
顶上去
lulu_xiaoniu 2008-12-31
  • 打赏
  • 举报
回复
现在的问题是:如果已经开始读取数据了,数据库已经打开了,在读的过程中网络中断,这个时候就会抛出异常!请问我用上面这个好使不?
Thread MonitorNet = new Thread(new ThreadStart(this.NetStatus));//创建线程:监视网络连接情况
Thread DataCenter = new Thread(new ThreadStart(this.ConDataCenter));//创建线程,用于和数据中心的通讯
Boolean isConnect = false;//判断网络连接状况,以便决定是否向数据中心传输数据
//code...
private void NetStatus()
{
//判断目前网络连接状态,设定isConnect值
}
private void ConDataCenter
{
if(isConnect)
{
try
{
//...
}
catch
{
isConnect = false;
//...
}
}
}

tiger999 2008-12-31
  • 打赏
  • 举报
回复

hook event to
System.Net.NetworkInformation.NetworkChange.NetworkAvailibityChanged

or you can check network availability by calling
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

you can also ping your server
System.Net.NetworkInformation.Ping

you should disable the timer if network is unavailable
poorman19821018 2008-12-31
  • 打赏
  • 举报
回复
顶一下,学习了
fuyuxin19801120 2008-12-31
  • 打赏
  • 举报
回复
.net有个ping类 有个方法好像叫send ping 主机的IP 应该可以解决吧 个人认为
whn1119 2008-12-30
  • 打赏
  • 举报
回复

Thread MonitorNet = new Thread(new ThreadStart(this.NetStatus));//创建线程:监视网络连接情况
Thread DataCenter = new Thread(new ThreadStart(this.ConDataCenter));//创建线程,用于和数据中心的通讯
Boolean isConnect = false;//判断网络连接状况,以便决定是否向数据中心传输数据
//code...
private void NetStatus()
{
//判断目前网络连接状态,设定isConnect值
}
private void ConDataCenter
{
if(isConnect)
{
try
{
//...
}
catch
{
isConnect = false;
//...
}
}
}
whn1119 2008-12-30
  • 打赏
  • 举报
回复
网络连接应该是长连接,数据库连接操作每次取后就应该关闭
建议用线程控制,一条专门查看网络连接状态,一条专门负责与远程数据库读取数据
可以设个网络连接状态的全局变量,读取数据前先判断网络连接状态

superzxf 2008-12-30
  • 打赏
  • 举报
回复
发生断网可以尝试重新连接数据库
一般定时读取数据可以每次读取的时候去连接数据库,而不是建立一个全局的连接保持在那里
goldxinx 2008-12-30
  • 打赏
  • 举报
回复
用静态类的静态变量控制
lulu_xiaoniu 2008-12-30
  • 打赏
  • 举报
回复
如何抛一次就不抛了!帮忙写下被!谢谢!是不是在finaly{}里做文章! 在里面应该写什么才能只抛一次????谢谢!
bbbbbb888888 2008-12-30
  • 打赏
  • 举报
回复
抛一次就不抛了,
lulu_xiaoniu 2008-12-30
  • 打赏
  • 举报
回复
不加抛出异常 那程序遇到错误怎么办?
lulu_xiaoniu 2008-12-30
  • 打赏
  • 举报
回复
sprc_lcl 2008-12-29
  • 打赏
  • 举报
回复
网络传输问题,你加的try-catch不要抛出异常就是了
jin_yhai 2008-12-29
  • 打赏
  • 举报
回复
我也遇到这个问题,帮顶!!!
whn1119 2008-12-29
  • 打赏
  • 举报
回复
帮顶

弹出提示会不会是你在检索数据库的时候try catch语句中写的?

如果想要检查长连接有效性的话,心跳测试中定期发送数据包,然后接受服务器的反馈信息吧
如果服务器是什么设备反馈不了,那就用最原始的心跳测试中去ping吧

个人意见 关注

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧