以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  LIKE疑惑与timerclick带来的卡顿  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=135265)

--  作者:douglas738888
--  发布时间:2019/5/22 11:20:00
--  LIKE疑惑与timerclick带来的卡顿

请教老师,几个问题请教

问题1 :下面标注颜色的代码,都能实现同样的功能,哪个执行效率高,并且统计负荷小,窗口TimerClick中使用LIKE是否会影响打开项目和窗口的速度?


Dim st019 As WinForm.Label = Forms("主页").Controls("Lab16")
Dim Count019 As Double


Count019 = DataTables("文件").SQLCompute("Count(登记编号)","发送_指定接收人 Like  \'%" & _UserName & "%\' and (接收确认 Not Like \'%" & _UserName & "%\' Or 接收确认 Is null) And 发送_完成 = 1 And 接收完成 = 0")
Count019 = DataTables("文件).SQLCompute("Count(登记编号)","发送_指定接收人 = \'" & _UserName & "\' and (接收确认 <> \'" & _UserName & "\' Or 接收确认 Is null) And 发送_完成 = 1 And 接收完成 = 0")

st019.Text = "" & Count019 & ""

 

问题2: 窗口里的TimerClick中,写入了如上代码类型,约有20个,计时器启用间隔为5000,窗口中有一个表设置了如下代码,鼠标在表中移动时,每隔5秒就卡顿一次,卡顿时间约3秒,如此反复很难受,把问题1的代码在计划管理中,不使用窗口的TimerClick,也没有改善;同时类似的问题也会影响到窗口中的菜单按钮和Button按钮使用(鼠标经过按钮遇到TimerClick间隔卡顿时,按钮背景不会变色也不会被选取),怎样能改善这个问题?     类似的问题,论坛中也有人提到过。

DrawCell

If e.Table.Name = vars("t") And e.Row.Index = vars("r") Then 
    e.Table.DataTable.AddUserStyle("变色",Color.White,Color.DeepSkyBlue)
    .Style = "变色"
End If

MouseEnterCell

vars("t") = e.Table.Name
vars("t") = Tables("主页_Table1").Name
vars("r") = e.Row.Index
e.Table.Refresh

MouseLeaveCell

vars("t") = Nothing
vars("r") = -1

[此贴子已经被作者于2019/5/22 11:20:31编辑过]

--  作者:有点甜
--  发布时间:2019/5/22 11:23:00
--  

1、没有多少区别。忽略不计。

 

2、SQLCompute每执行一次,耗时0.5秒,请确认你执行了多少个耗时代码。

 

3、如果需要执行,用异步函数处理一下试试 http://www.foxtable.com/mobilehelp/scr/3269.htm


--  作者:douglas738888
--  发布时间:2019/5/22 15:56:00
--  

谢谢老师的指导,异步编程,看了大概有个了解了,

 

有些不明白,是否是:上述在Timerclick中的代码在内部函数中建立一个函数把代码写过去要用到Sleep,每一个统计值的代码段都要写一次,类似的代码再在Timerclick中写一次,不知我的理解对吗?请老师就上面的实例,指导写个函数的代码,我参考参考学习学习,谢谢!

[此贴子已经被作者于2019/5/22 15:56:52编辑过]

--  作者:有点甜
--  发布时间:2019/5/22 16:41:00
--  
把你timertick事件的代码,写到函数里面,然后在timertick事件,异步调用函数,即可。
--  作者:douglas738888
--  发布时间:2019/5/23 10:48:00
--  

老师我这样写的,不知对吗? 感觉没有明显改善,依然卡顿,卡顿时间约2秒

 

这样的代码段,我数了一下有27个,因为要统计显示多个表的数据,只能一个一个Label来呈现出来,这样的话控件比较多

函数Task:

Dim Count019 As Double
Count019 = DataTables("文件").SQLCompute("Count(登记编号)","发送_指定接收人 = \'" & _UserName & "\' and (接收确认 <> \'" & _UserName & "\' Or 接收确认 Is null) And 发送_完成 = 1 And 接收完成 = 0")
Sleep(50) \'暂停线程50毫秒
Return  Count019

 

timerclick:

Dim pbx06 As WinForm.PictureBox = Forms("主页").Controls("PictureBox06")
Dim st019 As WinForm.Label = Forms("主页").Controls("Lab16")
Dim Count019 As Double
Count019 = DataTables("文件).SQLCompute("Count(登记编号)","发送_指定接收人 = \'" & _UserName & "\' and (接收确认 <> \'" & _UserName & "\' Or 接收确认 Is null) And 发送_完成 = 1 And 接收完成 = 0")
If Count019 = 0 Then
   pbx06.ImageFile = "OK.png" \'显示符号
   st019.ForeColor = Color.DimGray \'Gainsboro \'字体颜色  
ElseIf Count019 > 0 Then
   pbx06.ImageFile = "NO.png" \'显示符号
   st019.ForeColor = Color.Red \'字体颜色 
End If
st019.Text = "" & Count019 & ""

Functions.AsyncExecute("Task")

[此贴子已经被作者于2019/5/23 10:53:29编辑过]

--  作者:有点蓝
--  发布时间:2019/5/23 11:57:00
--  
操作控件要异步加同步处理:http://www.foxtable.com/mobilehelp/scr/3274.htm
--  作者:有点甜
--  发布时间:2019/5/23 15:16:00
--  

把timerclick事件的整段代码,都写到函数里面去处理。

 

如果报错,再加上同步函数 http://www.foxtable.com/mobilehelp/scr/3274.htm

 


--  作者:douglas738888
--  发布时间:2019/6/10 15:57:00
--  

请教老师,我把TimerTick的全部代码都写到函数里面了,28个代码段,每个代码代码段都设了不同的

Sleep(20)

Return count1

 

TimerTick  里只写了这句代码

Functions.AsyncExecute("Task")

 

打开窗口正常,不同的统计值都正常,也不会出现时间间隔的断点影响,但是在本窗口Label点击打开另外窗口时(加载SQLTable)时报错,无效操作,连接被关闭........,无法加载表到窗口

 

这是什么问题,也不知道如何设置这样的同步函数,看了帮助也没弄懂,是否是异步函数执行时,其他主线程是被禁止使用的(如果不使用异步函数,加载表是正常的)


--  作者:有点甜
--  发布时间:2019/6/10 16:12:00
--  

点击打开另外的窗口,执行了什么代码?在哪里执行?

 

做一个对应的项目发上来测试。

 

 


--  作者:douglas738888
--  发布时间:2019/6/10 16:19:00
--  

5楼的代码

Dim st019 As WinForm.Label = Forms("主页").Controls("Lab16")

Dim Count019 As Double
Count019 = DataTables("文件).SQLCompute("Count(登记编号)","发送_指定接收人 = \'" & _UserName & "\' and (接收确认 <> \'" & _UserName & "\' Or 接收确认 Is null) And 发送_完成 = 1 And 接收完成 = 0")
If Count019 = 0 Then
   pbx06.ImageFile = "OK.png" \'显示符号
   st019.ForeColor = Color.DimGray \'Gainsboro \'字体颜色  
ElseIf Count019 > 0 Then
   pbx06.ImageFile = "NO.png" \'显示符号
   st019.ForeColor = Color.Red \'字体颜色 
End If
st019.Text = "" & Count019 & ""

 

比如:当st019.Text  = 1  有文件提示时,点击此控件

此控件的Click:

 

Forms("窗口2").Open
DataTables("窗口2_Table1").LoadFilter = "未阅读 = 0"
DataTables("窗口2_Table1").Load()