C# Windows Phone 8.1 GPS后台任务
我正在WP8.1上写一个GPS跟踪应用程序,我碰到了一堵墙。 我可以在任务中创建并使用它做任何我需要的事情,但我不能取消它。 作为参考,我用了这个 这是我使用的任务构造函数(也尝试了TaskFactory): 什么也没发生。有人有办法吗C# Windows Phone 8.1 GPS后台任务,c#,multithreading,windows-phone-8.1,task-parallel-library,task,C#,Multithreading,Windows Phone 8.1,Task Parallel Library,Task,我正在WP8.1上写一个GPS跟踪应用程序,我碰到了一堵墙。 我可以在任务中创建并使用它做任何我需要的事情,但我不能取消它。 作为参考,我用了这个 这是我使用的任务构造函数(也尝试了TaskFactory): 什么也没发生。有人有办法吗 这是否意味着,如果每次使用async()创建一个新线程时,它都使用一个新标记和一个按钮单击方法,那么我将取消该线程已经关闭的原始线程?如果是这样的话,有什么办法可以解决这个问题吗?在.Net中取消是合作的。你从外部取消它,你需要从内部观察取消。现在,你只能发出取
这是否意味着,如果每次使用async()创建一个新线程时,它都使用一个新标记和一个按钮单击方法,那么我将取消该线程已经关闭的原始线程?如果是这样的话,有什么办法可以解决这个问题吗?在.Net中取消是合作的。你从外部取消它,你需要从内部观察取消。现在,你只能发出取消信号 您的任务需要以某种方式检查令牌并停止任务:
Task.Run(async () =>
{
while (true)
{
tokenSource.Token.ThrowIfCancellationRequested();
await Task.Delay(1000);
progress.Report(null);
}
}, tokenSource.Token);
由于这正是接受CancellationToken
的Task.Delay
重载的实现方式,因此您可以依靠它来引发异常:
Task.Run(async () =>
{
while (true)
{
await Task.Delay(1000, tokenSource.Token);
progress.Report(null);
}
}, tokenSource.Token);
Net中的取消是合作的。你从外部取消它,你需要从内部观察取消。现在,你只能发出取消信号 您的任务需要以某种方式检查令牌并停止任务:
Task.Run(async () =>
{
while (true)
{
tokenSource.Token.ThrowIfCancellationRequested();
await Task.Delay(1000);
progress.Report(null);
}
}, tokenSource.Token);
由于这正是接受CancellationToken
的Task.Delay
重载的实现方式,因此您可以依靠它来引发异常:
Task.Run(async () =>
{
while (true)
{
await Task.Delay(1000, tokenSource.Token);
progress.Report(null);
}
}, tokenSource.Token);
伟大的工作起来很有魅力。非常感谢你的帮助!如果我想捕获为处理其他操作而生成的异常,该怎么办?@JarekBrocki
Task.Run
返回一个您可以等待的任务。太好了!工作起来很有魅力。非常感谢你的帮助!如果我想捕获为处理其他操作而生成的异常,该怎么办?@JarekBrockiTask.Run
返回您可以等待的任务。