这段代码怎样立即让它停止执行?

iipy 2010-03-27 03:39:14

'代码如下:

Dim objtimer As System.Threading.Timer

Public Sub StartTimer()
Dim callback As New Threading.TimerCallback(AddressOf Me.TimerMethod)

objtimer = New System.Threading.Timer(callback, Nothing, TimeSpan.FromSeconds(0), TimeSpan.FromSecond(5))
objtimer.Dispose()

End Sub

Dim i As Integer = 1
Public Sub TimerMethod(ByVal state As Object)

Threading.Thread.Sleep(10 * 1000)

MsgBox(i)

i = i + 1

End Sub


试着用dispose和change,但不行,程序必须要执行完本周期的运行,才能停止。

要求通过button的click事件,立即中断StartTimer运行周期,TimerMethod内的所有代码立即停止执行。
...全文
203 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwome 2010-03-30
  • 打赏
  • 举报
回复

顶楼上的

使用线程处理就好了啊。
oo渣渣oo 2010-03-30
  • 打赏
  • 举报
回复
除非你KILL掉程序进程
oo渣渣oo 2010-03-30
  • 打赏
  • 举报
回复
你必须用1楼的设置停止标记的方法才能停止下来,线程里的定时器好象是无法强行中止的.
pingker 2010-03-30
  • 打赏
  • 举报
回复
刚才Test 一下,延时效果并不理想。窗体会出现假死等现象。
再者,延时函数一般是不可以立即停止的
lsh2216024 2010-03-30
  • 打赏
  • 举报
回复
objtimer.ENABLED=FALSE
不知道这样符合你的要求不
cmy3918 2010-03-29
  • 打赏
  • 举报
回复
不太明白你要做什么..说要循环吧..还只执行一次就销毁了...
不过你为什么不用线程呢??
线程有一个Abort方法可以终止线程的..
iipy 2010-03-28
  • 打赏
  • 举报
回复
有好的解决方法吗??
tjficcbw 2010-03-28
  • 打赏
  • 举报
回复
这是关掉word的

       Dim TmpProc As Process
Dim procs As Process() = Process.GetProcesses()
For Each TmpProc In procs
If TmpProc.ProcessName.ToUpper = "WINWORD" Then
TmpProc.Kill()
End If
Next

你的程序关掉自己不知行否,要是不行,就用一个程序关掉另一个程序
iipy 2010-03-27
  • 打赏
  • 举报
回复
也就是在我需要kill这个进程的情况下,随时kill掉。。。
iipy 2010-03-27
  • 打赏
  • 举报
回复
那位二星的朋友抄人家的不好,顶帖可以。。。。

楼上这位朋友,谢谢,只不过你的代码还是不符合要求,可能是我没说清楚啊

细说一下,要求在程序运行期间,随时可以打断这个时间周期,也就是说

在If pcid = 1 Then Exit Sub 和 Threading.Thread.Sleep(5 * 1000)

之间或等待的5秒内,若发生click事件,那么那个周期内的msgbox就不应该弹出。整个程序中断退出。

另:那个objtimer.Dispose()加在那个地方,本身就使得StartTimer只能运行一次啊
tjficcbw 2010-03-27
  • 打赏
  • 举报
回复
楼上的,你是二星级的人物是我们的榜样为什么抄一遍我的代码?
xray2005 2010-03-27
  • 打赏
  • 举报
回复
'代码如下:
Dim pcid As Integer = 0
Dim objtimer As System.Threading.Timer

Public Sub StartTimer()
Dim callback As New Threading.TimerCallback(AddressOf Me.TimerMethod)

objtimer = New System.Threading.Timer(callback, Nothing, TimeSpan.FromSeconds(0), TimeSpan.FromSecond(5))
objtimer.Dispose()

End Sub

Dim i As Integer = 1
Public Sub TimerMethod(ByVal state As Object)
If pcid = 1 Then Exit Sub

Threading.Thread.Sleep(10 * 1000)

MsgBox(i)

i = i + 1

End Sub



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

pcid = 1
End Sub
tjficcbw 2010-03-27
  • 打赏
  • 举报
回复
    '代码如下:
Dim pcid As Integer = 0
Dim objtimer As System.Threading.Timer

Public Sub StartTimer()
Dim callback As New Threading.TimerCallback(AddressOf Me.TimerMethod)

objtimer = New System.Threading.Timer(callback, Nothing, TimeSpan.FromSeconds(0), TimeSpan.FromSecond(5))
objtimer.Dispose()

End Sub

Dim i As Integer = 1
Public Sub TimerMethod(ByVal state As Object)
If pcid = 1 Then Exit Sub

Threading.Thread.Sleep(10 * 1000)

MsgBox(i)

i = i + 1

End Sub



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

pcid = 1
End Sub

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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