以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 程序每隔一段时间自动假死 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=41402) |
-- 作者:wuxianzuoji41 -- 发布时间:2013/10/18 15:23:00 -- 程序每隔一段时间自动假死 窗口中timer加入了如下代码 ipa=Functions.Execute("GetNetIP") If ipa<>ipb Then Dim m As New MailSender m.Host = "smtp.189.cn" m.Account = "133100" m.Password = "abc12345" m.From = "1331100@189.cn" m.AddReceiver("133800@189.cn") m.AddReceiver("133100@189.cn") m.Title = "ip" & Functions.Execute("GetNetIP") m.C m.SendAsync() Else End If ipb=ipa 就是自动吧IP变化发到指定邮件里。但是当执行这个程序的时候程序就无法操作其他程序了。可以单独弄一个线程处理这个吗,这个该怎么编写 [此贴子已经被作者于2013-10-18 15:25:32编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2013/10/18 15:25:00 -- 不是有个ip变化就会触发的事件吗,你可以在这个事件写代码,不用定时执行的。 http://www.foxtable.com/help/topics/2710.htm
|
-- 作者:Bin -- 发布时间:2013/10/18 15:26:00 -- SendAsync 就是异步发送了啊. 是不是你Functions.Execute("GetNetIP") 里面的操作太繁琐耗时了?
|
-- 作者:wuxianzuoji41 -- 发布时间:2013/10/18 15:28:00 -- 狐狸爸爸这个可以检测外网IP变化吗,我是通过路尤器上网,我测试了好像不行。 |
-- 作者:wuxianzuoji41 -- 发布时间:2013/10/18 15:29:00 -- bin,我引用的是muhua的“狐表信息管理系统 ”里的那个GetNetIP函数,我登录时候也调用这个函数挺快的,但是放在TIMER里的时候大概要假死个20-40秒左右,又自动恢复正常 On Error Resume Next Dim httpURL As New System.Uri("http://ip.qq.com/") Dim httpReq As System.Net.HttpWebRequest = System.Net.WebRequest.Create(httpURL) httpReq.Method = "GET" Dim httpResp As System.Net.HttpWebResponse = httpReq.GetResponse() httpReq.KeepAlive = False Dim reader As New IO.StreamReader(httpResp.GetResponseStream, System.Text.Encoding.GetEncoding(-0)) Dim respHTML As String = reader.ReadToEnd() With CreateObject("vbscript.regexp") .Global = True .MultiLine = True .ignorecase = True \'.Pattern = ".*?\\<.*?\\>([^<>]+)[\\s\\S]*?" .Pattern = "当前的IP为.*?\\<.*?\\>([^<>]+)[\\s\\S]*?IP所在地为.*?\\<.*?\\>([^<>]+)" If .test(respHTML) Then With .Execute(respHTML)(0) Return Replace(.submatches(0), " ", " ") End With End If End With Functions.Execute("GetNetIP") bin 说的对,我自己也估计是这个函数时间比较长,有的时候,有什么好的解决方法吗 [此贴子已经被作者于2013-10-18 15:31:08编辑过]
|
-- 作者:Bin -- 发布时间:2013/10/18 15:38:00 -- 呵呵,这个是从网络获取的,网速有问题或者网站服务器慢的时候自然就会卡死了.无解! 当然你要使用多线程也是可以的,狐表用起来比较麻烦,我之前是搞C# 的.VB.net的多线程还不是很熟悉. |
-- 作者:有点甜 -- 发布时间:2013/10/18 20:07:00 -- 获取的时候,还是挺快的说。代码放到计划任务那里,就是多线程了哦,不会假死的吧? |
-- 作者:程兴刚 -- 发布时间:2013/10/18 20:31:00 -- 我的做法:增加一个全局变量,比如叫做:网络状态
NetworkAddressChanged事件代码:
Vars("网络状态") = TryConnectHost(www.jinyt.com)
BeforeLoadOuterTable事件代码:
If TryConnectHost("www.jinyt.com") = False Then
本事件代码,确保了在连接外部数据表的时候,如果网络不通,则暂时不连接,项目启动后,可以通过进入模块的代码再重新动态加载外部数据表,当服务器不可用时,继续忽略动作,不会链接。 【注】:本事件不能用全局变量,系统启动时全局变量还没有生成,会导致系统错误打不开。
BeforeSaveProject事件代码: If Vars("网络状态") = False
这个事件的代码,保证了在保存项目之前,如果网络不通,将自动禁止不保存,也就不会报错了。
采用这种方法的优点:全局变量的值就是您想要知道的网络是否可用,您没有必要不断地采用定时器去检查服务器是否可用,因为那样做,是需要占用时间的,计划或窗口定时器过于繁重的代码或检测远程服务器是否可用,是会导致系统出现卡顿现象的! |
-- 作者:lsy -- 发布时间:2013/10/30 9:11:00 -- 顶程老师。 |
-- 作者:Bin -- 发布时间:2013/10/30 9:23:00 -- 好主意! 顶 |