我正在寫一個與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