我正在写一个与CAN总线交互的VB.Net应用程序,以控制其上的一些电机。 利用CAN总线,我可以在正常和反向模式下打开和关闭每个电机,并读取其电流消耗。 我已经实现了每个电机的两个复选框,使其运行正常或反向,并显示实际消耗的文本框,这实际上是工作。 现在我想要做的是automatice一些测试,例如:在不阻挡用户界面的情况下运行一个任务两秒钟
- 运行每个电机两秒钟,每个方向并记录它的消费,看是否值是正确的。
为此,我创建了一个TestMotor类,在该类中发送两个按钮的参考,这些按钮在正常或反向每个电机时打开。每个测试等级代表每个电机的测试,所以如果我有4个电机,我将创建4个TestMotor对象,给它们两个启动该电机的复选框。
最后,TestMotor类有一个executeTest,它主要通过检查和取消选中复选框,在两个方向上运行电机。 这两秒延迟了它们之间的延迟。
我的问题是,如果我直接在主线程上运行这些测试,Thread.sleep会阻塞UI线程,但是如果我创建一个线程然后执行那些测试,那么这些测试同时执行。
你会如何解决这个问题?我一直在尝试使用异步任务,定时器,现在我会尝试一些信号量或某种东西,但有关解决此问题的最佳方法的一些帮助会很好。
一些代码:
在主类
for each test in test
test.executeTest()
end for
TestMotor类
public sub executeTest()
ckNormal.checked = true
Thread.sleep(2000)
ckNormal.checked = false
ckReverse.checked = true
Thread.sleep(2000)
ckReverse.checked = false
end sub
谢谢!
如果我使用任务。在主线程中延迟,它只是关闭程序,不工作,我认为这是一个好主意,但要与一个新的线程,然后在这里我有一个问题,看看如何使主要威胁等待执行新的测试,直到实际还没有完成。 – rul3s
@ rul3s:你有没有等待延迟? '等待Task.Delay(2000)' –
是rul32做@VisualVincent所说的,威胁它作为一个异步任务 – bmvr