我将返回在Windows Phone 7应用程序中执行一些更新,其中一个包括在不阻止UI的情况下暂停应用程序。我不确定这样做的最好方法。在Windows Phone 8中,我引用了How to Pause without Blocking the UI,其中我做了
void newButton_Click(object sender, EventArgs e)
{
if (Settings.EnableVibration.Value) //boolean flag to tell whether to vibrate or not
{
VibrateController.Default.Start();
Task.Delay(100);
}
...
}
但Task.Delay
我在Windows Phone 7中找不到。有任何建议或建议吗?
答案 0 :(得分:0)
这适用于Windows 8,我的猜测是它也适用于你。如果您在后台持续运行进程,使用任务,则可以执行以下操作:
定义在后台运行的内容:
如果要暂停
,请定义一个任务和一个bool来翻转 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;
但是,我必须指出这方面的一些缺陷。我会找到一种方法来确定什么时候应该“暂停”后台运行代码的任务,能够解锁后台线程。这个例子只是迫使线程等待一段时间。我会根据应该“阻止”它的代码来回翻转bool。换句话说,根据需要阻塞和解除阻塞,而不是依赖于计时器。这种方法应该让你的UI仍在工作,而任务(a.k.a。线程)中的工作可以在预定的时间内完成任何工作。
这里有很多陷阱。如何在没有计时器的情况下让线程等待?现在您将进入更复杂的线程等待逻辑。上面代码的好处是它处于循环中。如果不是这样,你怎么做?不幸的是,你提出的问题相当模糊,所以我真的不知道你到底想要什么“暂停”。请使用上面的代码作为起点。