簡體   English   中英

如何在C#中暫停循環(同時,foreach,for或其他方式)?

[英]How can I pause a loop (while, foreach, for, or otherwise) in C#?

有沒有一種方法可以將循環暫停指定的時間而不會阻塞? 我不想使用Thread.Sleep(xx)。 有沒有辦法使用手動事件或調度程序計時器來暫停循環? 我不想使用thread.sleep,因為它阻塞了線程,我也不想這樣。

編輯:

我想做的類似於在這里發布:

串行端口響應EventHandler,但不響應ReadExisting或ReadLine?

那里沒有答案,所以我在這里解釋了我需要做的事情。

我無法打開串口並保持打開狀態,每次都必須關閉它。 因此,我要執行的操作是單擊循環中的第一項,打開該comport,對其進行寫入,然后從中讀取,然后將其關閉。 如果您曾經在Windows上使用過鼠標或藍牙掃描儀,那么您就會知道並非每個命令都會一直發送信息。 因此,如果端口不回傳消息,則必須超時。 如果短時間內沒有收到消息,我需要繼續。

如果第一次沒有響應,我可能會用不同的消息再次擊中同一端口。 當我這樣做時,我得到一個錯誤,表明該端口已經打開; 這是因為循環只是遍歷代碼而沒有足夠的停頓。

thread.sleep只是阻止線程,以及該命令發送回該線程的消息,我不知道為什么,它只是這樣做。 我寧願不使用thread.sleep。

當我循環通過它時,我希望它暫停直到關閉端口,然后再從循環中的下一個項目開始。 那是最重要的部分。

有沒有辦法開始循環,在新線程上產生方法,暫停調用它的循環,等待消息返回或時間限制,然后在另一個線程這樣說時讓循環繼續? 謝謝

編輯

我用了一個AutoResetEvent。 謝謝你的幫助

如果您暫停某些內容,則其將被定義阻止。 暫停一個線程肯定會控制其他線程。

除非您需要其他代替暫停的內容?

對您造成了什么困擾-也許如果您更新問題...

我剛剛弄清楚-也許您想暫停並讓UI運行-然后執行以下操作(在循環的每個步驟中):

int times = 100;
while (times > 0) 
{
    Application.DoEvents();
    Thread.Sleep(10);
    times--;
}

這都會使GUI響應您,並會降低循環速度。

使用ManualResetEvent 它允許您暫停一個線程,直到另一個線程發出信號以繼續執行。

在提供的鏈接中,底部有一個示例,顯示了如何使用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM