問題:我有一個程序用一些命令讀取文本腳本文件,這些命令通過串口發送給某些硬件。例如。向左移動機器人10秒。在腳本中我有一些關鍵字,例如。 #delay
它們被分析腳本並在檢測到'#'關鍵字時執行某些操作的函數識別。在延遲的情況下,我想延遲X毫秒的時間,而不會使UI停止響應,所以如果腳本正在運行,我仍然可以暫停或停止腳本。目前正在使用我想擺脫的Thread.Sleep。C#串口延時沒有阻塞UI
嘗試:我試圖使用定時器,如:
public void delay(int ms) {
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = ms;
timer.Tick += (s, o) => {timer.Enabled = false; timer.Dispose(); Application.DoEvents();};
timer.Enabled = true;
}
或者:
// Delay Function
private void delay(int ms)
{
if (ms < 100) return;
DateTime delay_amount = DateTime.Now.AddMilliseconds(ms);
while (DateTime.Now < delay_amount) {
Application.DoEvents();
}
}
我試圖啓動腳本上一個新的線程讀取功能,但我不能,因爲它使用主線程使用的一些組合框...... 所有這些解決方案都讓我的用戶界面無法響應。有人可以幫幫我嗎? 我的目標是.NET 4.0。
使用'等待Task.Delay'和使用'await'關鍵字之前更改調用的方法來'私人async'。 – Fabio
創建新線程並使用Invoke訪問UI線程中的組合框 –
爲處理腳本創建自己的線程(類)。使用UI僅用於控制它,閱讀狀態/進度等 – apocalypse