我希望我的代码始终在线程中读取某些条件,例如读取编码器的位置。
在并行运行中,我需要对步进电机执行一个命令,使其转到一个位置并等待,直到到达该位置,才将输出位设置为“ 1”。但是,当我启动“位置未到达”循环时,它将停止读取位置并初始化txtPosX
或txtPosY
的线程。
我已经试过doevents()
和thread.sleep(time)
来查看是否在睡眠时,其他代码从另一个读取X和Y轴的代码中执行了一些指令。
Imports System.Threading
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ThreadPool.QueueUserWorkItem(AddressOf trdReadAxis)
End Sub
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
ThreadPool.QueueUserWorkItem(AddressOf trdStartJob)
End Sub
Private Delegate Sub delegate1()
Private Sub trdReadAxis()
Do While true
If InvokeRequired Then
Dim d As New delegate1(AddressOf trdReadAxis)
Invoke(d, Nothing)
Else
TPX = lib1.command("TELL POSITION X")
TPY = lib1.command("TELL POSITION Y")
txtPosX.text = TPX
txtPosY.text = TPY
End If
Loop
End Sub
Private Sub trdStartJob()
If InvokeRequired Then
Dim d As New delegate1(AddressOf trdStartJob)
Invoke(d, Nothing)
Else
lib1.command("GO X TO POSITION 100")
lib1.command("GO y TO POSITION 200")
Dim contIntX As Integer = 100
Dim contIntY As Integer = 200
While movIsComp = False
Thread.Sleep(200)
If TPX = contIntX And TPY = contIntY Then
movIsComp = True
End If
Application.DoEvents()
End While
#do other stuffs
End If
End Sub
End Class
可以预期,当trdStartJob()
在while循环中等待位置时,trdReadAxis()
使文本框实例化。但是我已经冻结了txtPosX
和txtPosY
。
所以我需要等待循环达到"movIsComp = True"
的条件,才能看到txtBoxes
展示它们应该显示的内容。
(对不起我的英语不好,我正在努力提高...)