vb.net 多线程卡死界面,新手求前辈们帮助,感谢 10

Privatet40AsNewThread(NewThreadStart(AddressOfds40))'启动PrivateSubbtnRun_Click(senderA... Private t40 As New Thread(New ThreadStart(AddressOf ds40))
'启动
Private Sub btnRun_Click(sender As System.Object, e As System.EventArgs) Handles btnRun.Click
t40.Start()
End Sub
Sub ds40()
If Run = False Then
Thread.Sleep(System.Threading.Timeout.Infinite)
End If
Dim i As Long = 0
Do Until Monitor = False
BeginInvoke(New EventHandler(AddressOf ds41), i)
i += 1
Thread.Sleep(30)
Application.DoEvents()
Loop
End Sub

Sub ds41(ByVal sender As System.Object, ByVal e As System.EventArgs)
For i As Integer = 0 To Number - 1 Step 1
iData = Me.libSource.Items.Item(i)
Me.libSource.SelectedIndex = i

'返回以空格隔断的字符
Dim data() As String = iData.Split()
Dim Carid As UShort = 0
'选择发送函数
Select Case data(0)
Case "Line"
iChiG.ModuleCard.d2410_set_vector_profile(data(9), data(11), 0.1, 0.1)
iChiG.ModuleCard.d2410_t_line4(Carid, data(3), data(5), data(7), 1000, 1)
Do
Thread.Sleep(100)
Loop While ah = 1
Case "Wait"

Case "Set"
iChiG.ModuleCard.d2410_write_outbit(Carid, data(2), data(5))

Case "Time"
Thread.Sleep(data(3))
End Select
Next
End Sub
展开
 我来答
zhangyalei0921
2014-12-07 · 超过22用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:48.3万
展开全部
“卡死”是一个非常主观的描述,如果你要让主线程杀掉卡死的线程,那么你必须给“卡死”做出准确的定义。
什么是卡死?30秒没有响应就是卡死?那么“没有响应”的定义又是什么?

你给出这些条件以后,杀掉一个线程就不难。Abort方法,Dispose方法,都可以。
追问
我大概了解了一下,估计是在线程中使用了循环体导致主界面假死,可是我又必须要在循环体中的条件满足后才能进行下一次操作,所以不能杀掉这个线程,谢谢
追答
有问题再追问吧。
匿名用户
2017-09-12
展开全部
“卡死”是一个非常主观的描述,如果你要让主线程杀掉卡死的线程,那么你必须给“卡死”做出准确的定义。什么是卡死?30秒没有响应就是卡死?那么“没有响应”的定义又是什么?你给出这些条件以后,杀掉一个线程就不难。Abort方法,Dispose方法,都可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式