3

我在我的 wp7 应用程序中使用 TPL 进行一些后台操作。

该应用程序启动一个任务:

var task =
    Task.Factory.StartNew(
        () =>
        {
            // Some sort of operations
        });

在此之后,应用程序运行 UI 的更新:

task.ContinueWith(
    obj =>
    {
        // UI updates
    },
    new CancelationSource.Token,
    TaskContinuationOptions.None,
    TaskScheduler.FromCurrentSynchronizationContext());

但有一个问题。如果我按下后退按钮关闭应用程序,并且任务尚未完成,应用程序会抛出带有内部 ThreadAbortException 的 AggregateException。据我所知,这是因为背景线程错误地结束了。

我怎样才能防止这种情况?也许有某种正确的方法来取消任务?

我只有一个想法——抓住这个异常并假装什么都没发生。这样对吗?

4

1 回答 1

1

当您点击后退按钮退出应用程序时,框架会等待一小段时间,然后中止所有正在进行的线程。正是中止导致了异常。

如果您想避免异常,您必须处理主页上的 BackKeyPress 事件(或其他检测回压的方法)并取消您的 Task 对象。当然,这意味着您需要跟踪取消令牌。

于 2012-05-20T23:07:24.227 回答