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' 操作。
你必须为此使用 "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/
我有这样的任务
private async Task SaveToFile(StorageFile file)
{
// prepare data
await ...
Debug.Writeline("completed");
}
如果用户按下 "back" 按钮,此任务将不会完成。我需要一种方法让它继续,直到完成所有操作,即使调用应用程序不再 运行。
不,如果父进程终止,您不能强制任务保持 运行ning。
也就是说,除非您的文件保存时间超过 10 秒(用计算机术语来说,这是永恒的),否则您描述的问题并不是真正的问题。
Windows Phone 应用程序在后台继续 运行 最多 10 秒,在用户 'backs' 退出后,或手动退出。这应该足以让任何应用程序完成其 'cleanup' 操作。
你必须为此使用 "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/