Windows 存储后台任务
Windows Store Background Task
我正在尝试测试我的后台任务:
这是我的任务注册:
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
task.Value.Unregister(true);
}
await BackgroundExecutionManager.RequestAccessAsync();
var builder = new BackgroundTaskBuilder();
builder.Name = "MySampleTask";
builder.TaskEntryPoint = "TestApplication.MyBackgroundTask";
builder.SetTrigger(new TimeTrigger(15,false));
var ret = builder.Register();
}
这是我的后台任务 class:
namespace TestApplication
{
public sealed class MyBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
FetchDataFromServerAsync();
}
public async Task FetchDataFromServerAsync()
{
if (Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile() != null)
{
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync(@"http://www.inbox.lv");
response.EnsureSuccessStatusCode();
string responseBodyAsText = await response.Content.ReadAsStringAsync();
await FileManager.FlushDataToFileAsync(responseBodyAsText, DateTime.Now.ToString("dd.MM.yyyy_HH.mm.ss") + ".txt");
}
}
}
}
这是我的清单:
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="TestApplication.MyBackgroundTask">
<BackgroundTasks>
<Task Type="timer" />
</BackgroundTasks>
</Extension>
</Extensions>
当我通过调试位置触发后台任务时 - 我的应用程序刚刚关闭并且没有断点被击中。
示例应用程序
Microsoft 制作了很多示例应用程序,展示了如何使用 Windows 特定于 API 的商店。后台任务就是其中之一。你可以继续 Download all of them on code.msdn.microsoft.com or Download the background task sample only from the site
另一个项目中的后台任务
我刚才读了一些关于后台任务的内容,我确实记得有人提到你的任务需要在另一个项目中。事实上,当您打开示例项目并查看解决方案资源管理器时,您会立即发现情况确实如此。
注意文件 SampleBackgroundTask.vb
是如何位于 Tasks
中的,这是第二个项目。
(不要被 vb 文件吓跑,还有 C# 示例)
我建议您完成后台任务
到目前为止,我已经检查了多个 Windows 运行时 API 样本来完成我的工作,它们都有效。
我想说你最好的选择是检查我上面链接的示例应用程序的代码,看看你的代码和示例代码之间有什么不同。
祝你好运。如果您需要更多规范,请发表评论,我可以自己进一步查看后台任务来帮助您。
我正在尝试测试我的后台任务:
这是我的任务注册:
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
task.Value.Unregister(true);
}
await BackgroundExecutionManager.RequestAccessAsync();
var builder = new BackgroundTaskBuilder();
builder.Name = "MySampleTask";
builder.TaskEntryPoint = "TestApplication.MyBackgroundTask";
builder.SetTrigger(new TimeTrigger(15,false));
var ret = builder.Register();
}
这是我的后台任务 class:
namespace TestApplication
{
public sealed class MyBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
FetchDataFromServerAsync();
}
public async Task FetchDataFromServerAsync()
{
if (Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile() != null)
{
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync(@"http://www.inbox.lv");
response.EnsureSuccessStatusCode();
string responseBodyAsText = await response.Content.ReadAsStringAsync();
await FileManager.FlushDataToFileAsync(responseBodyAsText, DateTime.Now.ToString("dd.MM.yyyy_HH.mm.ss") + ".txt");
}
}
}
}
这是我的清单:
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="TestApplication.MyBackgroundTask">
<BackgroundTasks>
<Task Type="timer" />
</BackgroundTasks>
</Extension>
</Extensions>
当我通过调试位置触发后台任务时 - 我的应用程序刚刚关闭并且没有断点被击中。
示例应用程序
Microsoft 制作了很多示例应用程序,展示了如何使用 Windows 特定于 API 的商店。后台任务就是其中之一。你可以继续 Download all of them on code.msdn.microsoft.com or Download the background task sample only from the site
另一个项目中的后台任务
我刚才读了一些关于后台任务的内容,我确实记得有人提到你的任务需要在另一个项目中。事实上,当您打开示例项目并查看解决方案资源管理器时,您会立即发现情况确实如此。
注意文件 SampleBackgroundTask.vb
是如何位于 Tasks
中的,这是第二个项目。
(不要被 vb 文件吓跑,还有 C# 示例)
我建议您完成后台任务
到目前为止,我已经检查了多个 Windows 运行时 API 样本来完成我的工作,它们都有效。
我想说你最好的选择是检查我上面链接的示例应用程序的代码,看看你的代码和示例代码之间有什么不同。
祝你好运。如果您需要更多规范,请发表评论,我可以自己进一步查看后台任务来帮助您。