![](/img/trans.png)
[英]How to stop a timer during hibernate/ sleep mode in C# winform application?
[英]Allow user to click on a Button of the form when Application is in Pause/Sleep Mode in C# winform Application
我正在使用一個C#winform應用程序,該應用程序連續瀏覽Web瀏覽器控件中的某些鏈接並處理該網頁的數據。 我需要在表單上為暫停和恢復提供兩個按鈕。
單擊按鈕后,整個應用程序應暫停處理,然后單擊“繼續”按鈕,應重新啟動。
因此,要暫停應用程序,請單擊“暫停”按鈕,然后通過以下代碼使線程進入無限時間的睡眠狀態。
private void Pause_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
}
但是這段代碼無法使用戶單擊表單上的“繼續”按鈕來恢復應用程序。 另外,單擊“繼續”按鈕后,我無法獲得完美的代碼來恢復應用程序。
任何人都可以為我找到解決此問題的正確方法嗎?
Thread.Sleep方法使代碼執行到進程調度程序,並且直到指定的時間過去才將其取回。 因此,您無法使睡眠線程自行喚醒。 就我所知,您甚至無法使工作線程喚醒另一個睡眠線程。
您需要以不同的方式實現目標。
我將在下面發布一些偽代碼,說明如何執行此操作:
private bool _Paused = false;
private void OnPauseClick()
{
_Paused = true;
}
private void OnResumeClick()
{
_Paused = false;
}
private void OnRunClick()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(WorkerMethod));
}
private void WorkerMethod(object state)
{
...
while (needToDoMoreWork)
{
// do some work here
...
// if pause requested, wait to unpause
while (_Paused)
{
// Sleep for a short time and check again if paused
Thread.Sleep(100);
}
}
}
您需要根據業務需要填寫空白。
如果您將UI線程無限期地睡眠,則將無限期地殺死UI。 不要那樣做
您的應用程序具有某種機制來知道是時候進行導航和處理了,可能是某種計時器。 如果是計時器,則在暫停應用程序時將其停止,並在恢復時再次啟動它。 如果是其他機制,您也需要停止它,但是如果不知道該機制是什么,很難告訴您如何做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.