簡體   English   中英

關於Thread.Sleep()2小時在C#中的問題

[英]Issue regarding Thread.Sleep() for 2hours in c#

我正在.net Windows應用程序上工作。

我正在使用System.Threading.Thread.

使用五(5)個線程的單一形式。 我有一個代碼,它在運行時會按順序執行一系列行。 我想在兩者之間添加一個暫停。

為此,我正在使用

Thread.Sleep(10800000)

3小時

但是我在執行以下命令后檢查了調試模式

Thread.Sleep(10800000)

我的調試未進入下一行,或者即使等待了4個小時,下一行也從未執行。

我在其他線程不在主線程中使用此Thread.Delay。 此延遲需要,因為我向硬件發送配置配置命令,該設置至少需要3個小時才能完成。

這就是為什么我用這個

Thread.Delay(10800000)

意味着我的后續代碼僅在等待3個小時后才能繼續執行。

誰能幫我?

Thread.Sleep不適用於長時間睡眠。 您應該考慮使用諸如System.Threading.Timer之類的東西

提供一種機制,用於以指定的時間間隔在線程池線程上執行方法。

您可以給它一個午夜的首次運行時間,並使其每24小時關閉一次。 Timer(TimerCallback,Object,TimeSpan,TimeSpan)構造函數正是您要尋找的。

有人會說,即使使用計時器也不是完成這項工作的最佳工具。 您可能要考慮使用Windows Task Scheduler (TS)。 使用TS,您可以設置時間表以說運行您的應用並執行工作流程,或者如果您的程序必須一直運行,則觸發另一個以某種方式與您的應用進行通信的進程。

如果該過程在下一個間隔之前什么也不做,那么最好只是終止該應用程序 這樣,您就不會浪費線程或進程在等待下一個間隔執行某項操作之前,將它們的拇指擺在過度的延遲上。

您可以使用c#中的Microsoft Task Scheduler v2 COM庫來設置計划,也可以從TS UI本身手動進行。

我建議使用計時器而不是Thread.Sleep或Delay。 代替Thread.Sleep,根據您的需要啟動一個3或4個小時超時的計時器,然后該計時器將發送所需的命令。

System.Threading.Timer可能會做

暫無
暫無

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

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