![](/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.