C# Windows Phone 8.1 运行时:如何使任务在应用程序生命周期之外存活?

C# Windows Phone 8.1 runtime: how to make a task survive beyond app lifecycle?

我有这样的任务

    private async Task SaveToFile(StorageFile file)
    {
        // prepare data
        await ...
        Debug.Writeline("completed");
    }

如果用户按下 "back" 按钮,此任务将不会完成。我需要一种方法让它继续,直到完成所有操作,即使调用应用程序不再 运行。

不,如果父进程终止,您不能强制任务保持 运行ning。

也就是说,除非您的文件保存时间超过 10 秒(用计算机术语来说,这是永恒的),否则您描述的问题并不是真正的问题。

Windows Phone 应用程序在后台继续 运行 最多 10 秒,在用户 'backs' 退出后,或手动退出。这应该足以让任何应用程序完成其 'cleanup' 操作。

参见:App Lifecycle Windows Runtime Apps

另请参阅:App activation and deactivation for Windows Phone 8

你必须为此使用 "background Task"。它很简单, 为后台任务创建一个新项目并将其添加到您的解决方案中,因为您的后台任务并不简单 class 它是一个单独的 WINRT 项目。为此,请在解决方案资源管理器中右键单击您的解决方案节点,然后 select 添加 -> 新建项目。然后selectWindows运行-time Component(UniversalWindows)工程类型,命名工程,点击确定。我在这里命名为"BackgroundStuff"。您可以为单个应用程序创建多个后台任务。没有任何限制。 考虑生成 toast 的简单示例,即使 App 不是 运行:

private async void button_Click(object sender, RoutedEventArgs e)
{
    string myTaskName = "MyBackgroundClass";
    // check if task is already registered
    foreach (var cur in BackgroundTaskRegistration.AllTasks)
        if (cur.Value.Name == myTaskName)
        {
            await (new MessageDialog("Task already registered")).ShowAsync();
            return;
        }
    // Windows Phone app must call this to use trigger types (see MSDN)
    await BackgroundExecutionManager.RequestAccessAsync();
    // register a new task
    BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder { Name = "MyBackgroundClass", TaskEntryPoint ="MybackgroundStuff.MyBackgroundClass" };
    taskBuilder.SetTrigger(new TimeTrigger(15, true));
    BackgroundTaskRegistration myFirstTask = taskBuilder.Register();

如果你想了解更多,请参考我的博客: http://windowsapplife.blogspot.in/