如何在不阻止UI的情况下暂停应用程序

时间:2013-10-25 23:45:45

标签: c# windows-phone-7

我将返回在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中找不到。有任何建议或建议吗?

1 个答案:

答案 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。线程)中的工作可以在预定的时间内完成任何工作。

这里有很多陷阱。如何在没有计时器的情况下让线程等待?现在您将进入更复杂的线程等待逻辑。上面代码的好处是它处于循环中。如果不是这样,你怎么做?不幸的是,你提出的问题相当模糊,所以我真的不知道你到底想要什么“暂停”。请使用上面的代码作为起点。