vb doevents使用的问题

唐诗三百首 2012-10-12 10:04:07
在一个timer的事件里,执行一个比较耗时的SP,导致程序没响应
据说用doevents可以,但不知具体如何用?

Private Sub t1_Timer()
adoCn.Open (sCnClient)
adoCn.CommandTimeout = 0
'DoEvents --> 加在这里没效果,执行SP期间程序没响应
adoCn.Execute ("exec sp名")
adoCn.Close
End Sub
...全文
231 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2012-10-12
  • 打赏
  • 举报
回复
对于存储过程,DoEvents是没有用的,就你这个问题,我觉得没有好的处理办法。
c_cyd2008 2012-10-12
  • 打赏
  • 举报
回复
1、把Execute ("exec sp名")放入另一线程,这个VB不太好做;
2、使用VB单元线程;
3、使用异步机制,如果你的 adoCn提供了异步方法;(注:若你的 adoCn是ADODB.Connection,则使用Execute("exec sp名",,adAsyncExecute)异步执行)
c_cyd2008 2012-10-12
  • 打赏
  • 举报
回复
1、把Execute ("exec sp名")放入另一线程,这个VB不太好做;
2、使用VB单元线程;
3、使用异步机制,如果你的 adoCn提供了异步方法;(注:若你的 adoCn是ADODB.Connection,则使用Execute("exec sp名",,adAsyncExecute)异步执行)
唐诗三百首 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
是没用。DoEvents 一般用在自己的循环中 ,以转让控制权。你的SP那是内部机制问题。
[/Quote]
请教大侠,这个需求应如何解决?
东方之珠 2012-10-12
  • 打赏
  • 举报
回复
是没用。DoEvents 一般用在自己的循环中 ,以转让控制权。你的SP那是内部机制问题。
嗷嗷叫的老马 2012-10-12
  • 打赏
  • 举报
回复
另创建一个ActiveX EXE工程,线程模式设置为"每个对象对应一个线程",然后创建一个需要在独立线程中运行的类,里面写上你的SP代码.

做好这个类的控制权转移处理(一般用Timer),然后就可以让这个类的实例在独立线程中执行了.

代码示例:

VB6里面使用多线程提高穷举速度(VB6代码)

如果对于多带一个EXE无所谓,那就可以把这个ActiveX EXE分离出来,这样主程序可以使用所有的控件,就不会像这个例子中一样仅能使用线程安全的控件了.

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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