.net大神帮看看下面的代码哪里有问题。为什么两个定时器都没有反应?
Imports System
Imports System.Threading.Tasks
Imports System.Timers
Public Class Form1
Private a As Integer
Private b As Integer
Private Sub setA()
Debug.Print("timer1开始", Now)
Timer1.Enabled = True
End Sub
Private Sub setB()
Threading.Thread.Sleep(200)
Debug.Print("timer2开始" & Now)
Timer2.Enabled = True
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t1 As Threading.Thread
Dim t2 As Threading.Thread
t1 = New Threading.Thread(AddressOf setA)
t2 = New Threading.Thread(AddressOf setB)
t1.Start()
t2.Start()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Timer1.Interval = 1000
Timer2.Interval = 1000
Timer1.Enabled = False
Timer2.Enabled = False
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
a = a + 1
If a = 4 Then
Debug.Print("timer1时间到", Now)
Timer1.Enabled = False
a = 0
End If
End Sub
Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer2.Tick
b = b + 1
If b = 3 Then
Debug.Print("timer2时间到", Now)
Timer2.Enabled = False
b = 0
End If
End Sub
End Class
VB.NET 多线程运行问题
答案:2 悬赏:70 手机版
解决时间 2021-02-25 10:52
- 提问者网友:精神病院里
- 2021-02-24 13:19
最佳答案
- 五星知识达人网友:人類模型
- 2021-02-24 13:54
多线程是用于处理复杂项目的
打个比方
你的主程序线程A中有个循环,由于代码是一行行走的,所以循环结束前下面的代码无法运行,而此时主界面的反应就类似卡死的样子,你点击按钮也没有反应,因为主线程在忙着循环呢,所以对按钮的事件代码要等待了,如果要避免这种情况,就要用到多线程,另开一个新线程专门用来执行循环代码,主界面就不会卡死了,只要在循环结束后将结果传回主线程调用就可以了,再复杂点要涉及到委托,控制了
按你的要求其实你的代码用不到多线程,只要把sleep放到两段代码中间就可以了。
新线程结束用thread.abort()
打个比方
你的主程序线程A中有个循环,由于代码是一行行走的,所以循环结束前下面的代码无法运行,而此时主界面的反应就类似卡死的样子,你点击按钮也没有反应,因为主线程在忙着循环呢,所以对按钮的事件代码要等待了,如果要避免这种情况,就要用到多线程,另开一个新线程专门用来执行循环代码,主界面就不会卡死了,只要在循环结束后将结果传回主线程调用就可以了,再复杂点要涉及到委托,控制了
按你的要求其实你的代码用不到多线程,只要把sleep放到两段代码中间就可以了。
新线程结束用thread.abort()
全部回答
- 1楼网友:西风乍起
- 2021-02-24 15:06
thread = new system.threading.thread(addressof dostuff)thread.start()private sub dostuff() 'error occurs here' me.text = "stuff"end sub
方案1:
private sub dostuff() me.checkforillegalcrossthreadcalls = false me.text = "stuff"end sub
方案二thread = new system.threading.thread(addressof dostuff)thread.start()private delegate sub dostuffdelegate()private sub dostuff() if me.invokerequired then me.invoke(new dostuffdelegate(addressof dostuff)) else me.text = "stuff" end ifend sub
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯