Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Phone 8.1 GPS后台任务_C#_Multithreading_Windows Phone 8.1_Task Parallel Library_Task - Fatal编程技术网

C# Windows Phone 8.1 GPS后台任务

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中取消是合作的。你从外部取消它,你需要从内部观察取消。现在,你只能发出取

我正在WP8.1上写一个GPS跟踪应用程序,我碰到了一堵墙。 我可以在任务中创建并使用它做任何我需要的事情,但我不能取消它。 作为参考,我用了这个

这是我使用的任务构造函数(也尝试了TaskFactory):

什么也没发生。有人有办法吗


这是否意味着,如果每次使用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
返回一个您可以等待的任务。太好了!工作起来很有魅力。非常感谢你的帮助!如果我想捕获为处理其他操作而生成的异常,该怎么办?@JarekBrocki
Task.Run
返回您可以等待的任务。