这适用于 Windows 8,我猜它也适用于你。如果您在后台有一个不断运行的进程,使用任务,您可以这样做:
定义在后台运行的东西:
定义要暂停时要翻转的任务和布尔值
Task doStuff;
static bool pauseTask = false;
在需要的地方定义任务:
doStuff = new Task(LoopForMe);
doStuff.Start();
只是做某事的功能
private async static void LoopForMe()
{
//Keep thread busy forever for the sake of the example
int counter = 0;
while (true)
{
//Define pauseTask as a static bool. You will flip this
//when you want to pause the task
if (pauseTask)
{
await Task.Delay(100000);
pauseTask = false;
}
Debug.WriteLine("working... " + counter);
counter++;
//Do something forever
}
}
在您的事件中,您可以翻转布尔值:
pauseTask = true;
但是,我必须指出其中的一些缺陷。我会找到一种方法来确定应该“暂停”后台运行代码的任务何时能够解锁后台线程。这个例子只是强制线程等待一段时间。我会根据应该“阻止”它的代码来回翻转布尔值。换句话说,根据需要阻塞和解除阻塞线程,而不是依赖计时器。这种方法应该让您的 UI 在任务(又名线程)中的工作在预设时间内不做任何工作时仍然工作。
这里有很多陷阱。没有计时器如何让线程等待?现在您将进入更复杂的线程等待逻辑。上面代码的好处是它处于循环中。如果不是,你怎么做?不幸的是,您提出的问题相当含糊,所以我真的不知道您到底想“暂停”什么。请使用上面的代码作为起点。