Windows Phone 8.1 后台任务
2020-12-13 02:20
标签:c style class blog code java Windows Phone 8.1 应用可以添加多个后台任务,以辅助应用完成某些任务。 (1)新建前台应用 后台任务是依托于前台应用的,所以必须拥有一个前台应用。 该前台应用的功能很简单,就是读取文件中保存的文本;而后台任务就是将当前时间写入文件中。 前台界面: 打开应用时就读取文本信息: (2)添加一个 Windows Runtime Component 项目 后台任务必须为 Windows Runtime Component。 (3)编写一个继承自 IBackgroundTask 接口的类 在后台任务的项目中新建一个类,并继承 IBackgroundTask 接口,实现 Run
方法,该类还必须为 sealed: Run 方法就是后台任务执行时的方法。 (4)前台应用 Manifest 中添加后台任务
可以设置触发器的类型,记得设置后台任务的入口点。 然后前台应用添加后台任务项目的引用。 (5)前台应用对后台任务进行注册与解除注册 最后的一步也就是在前台应用中对后台任务进行注册了: 这里选择的触发器为“当时区改变时”,这只是为了方便测试,你可以根据需要自行选择。 解除注册的方法为: Windows Phone 8.1 后台任务,搜素材,soscw.com Windows Phone 8.1 后台任务 标签:c style class blog code java 原文地址:http://www.cnblogs.com/xiaoshi3003/p/3763281.htmlGrid>
Grid.RowDefinitions>
RowDefinition Height="*"/>
RowDefinition Height="auto"/>
Grid.RowDefinitions>
Viewbox Margin="20,0">
TextBlock x:Name="timeTextBlock"
Text="Time"/>
Viewbox>
Grid Grid.Row="1" Margin="20,0">
Grid.ColumnDefinitions>
ColumnDefinition Width="*"/>
ColumnDefinition Width="*"/>
Grid.ColumnDefinitions>
Button x:Name="registerButton"
Content="Register Task"
Margin="0,0,5,0"
HorizontalAlignment="Stretch"
Click="registerButton_Click"/>
Button x:Name="unregisterButton" Grid.Column="1"
Content="Unregister Task"
Margin="5,0,0,0"
HorizontalAlignment="Stretch"
Click="unregisterButton_Click"/>
Grid>
Grid>
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
await ShowFileText();
}
private async Task ShowFileText()
{
file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Time.txt", CreationCollisionOption.OpenIfExists);
timeTextBlock.Text = await FileIO.ReadTextAsync(file);
}
public sealed class WritingTask: IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
await WriteTimeToFile("Time.txt");
deferral.Complete();
}
private async Task WriteTimeToFile(string path)
{
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, DateTimeOffset.Now.ToString());
}
}
private async void registerButton_Click(object sender, RoutedEventArgs e)
{
BackgroundExecutionManager.RemoveAccess();
await BackgroundExecutionManager.RequestAccessAsync();
RegisterTask();
}
private static void RegisterTask()
{
SystemTrigger triger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);
BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = "WritingTask";
taskBuilder.SetTrigger(triger);
taskBuilder.TaskEntryPoint = typeof(ZMyBackgroundTasks.WritingTask).FullName;
taskBuilder.Register();
}
private void unregisterButton_Click(object sender, RoutedEventArgs e)
{
var task = BackgroundTaskRegistration.AllTasks.Values.First();
task.Unregister(true);
BackgroundExecutionManager.RemoveAccess();
}