通用 Windows 应用后台任务"has exited with code 1 (0x1)"



在这个问题上挠我的头。

我在我的UWP应用程序中有一个后台任务,它注册为每15分钟运行一次(使用TimeTrigger),并且每当互联网可用时(使用SystemTrigger)。我知道,当使用visual studio进行调试时,它们都会正确注册,因为它们都出现在"生命周期事件"中。尽管如此,我注册它们的代码如下:

bool registered1 = false;
bool registered2 = false;
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
    if (task.Value.Name == "BackgroundGPS")
    {
        registered1 = true;
    }
    if (task.Value.Name == "InternetAvailGPS")
    {
        registered2 = true;
    }
}
await BackgroundExecutionManager.RequestAccessAsync();
if (!registered1)
{
    var builder1 = new BackgroundTaskBuilder();
    builder1.Name = "BackgroundGPS";
    builder1.TaskEntryPoint = "BackgroundTasks.BackgroundGPSTask";
    var triggerTime = new TimeTrigger(15, false);
    builder1.SetTrigger(triggerTime);
    BackgroundTaskRegistration task1 = builder1.Register();
}
if (!registered2)
{
    var builder2 = new BackgroundTaskBuilder();
    builder2.Name = "InternetAvailGPS";
    builder2.TaskEntryPoint = "BackgroundTasks.BackgroundGPSTask";
    var triggerIA = new SystemTrigger(SystemTriggerType.InternetAvailable, false);
    builder2.SetTrigger(triggerIA);
    BackgroundTaskRegistration task2 = builder2.Register();
}

我已确保任务在我的清单中正确声明。如果没有,我的应用程序在尝试注册它们时会抛出异常。

如果我在调试模式下运行,我可以看到BackgroundGPSInternetAvailGPS都显示在Lifecycle Events中。然而,当我点击其中一个来强制执行时,我会在输出窗口中得到以下内容:

The program '[4728] backgroundTaskHost.exe' has exited with code 1 (0x1).

我在后台任务的"Run"方法的第一行代码处设置了一个断点,但从未命中。后台任务从未加载或运行,我不知道为什么。这可能不是我的Run方法的问题,但它看起来是这样的(我省略了它的大部分内容,只包括开头和结尾)

public async void Run(IBackgroundTaskInstance taskInstance)
{
    Debug.WriteLine("GPS Started");
    int errCode = 0;
    try
    {
        _deferral = taskInstance.GetDeferral();
        saveGPSStatus(DateTime.Now.ToString(), "", " ");
        var access = await Geolocator.RequestAccessAsync();
        if (access != GeolocationAccessStatus.Allowed)
        {
            Debug.WriteLine("No access");
            saveGPSStatus("", "", "No GPS Access");
            return;
        }
        Geolocator locator = new Geolocator();
        locator.DesiredAccuracyInMeters = 100;
        Geoposition position = await locator.GetGeopositionAsync();
         //Stuff goes on in here
        _deferral.Complete();
    }
    catch (Exception e)
    {
        Debug.WriteLine(e.Message);
        saveGPSStatus("", "", "Unexpected error. Err code "+errCode+". " + e.Message);
        _deferral.Complete();
    }
}

我在Windows Phone和Windows平板电脑上都尝试过这两种方法,它们都运行10.0.1056.164版本,但它们都不执行我的后台任务。

正如我上面所说,这些在几周前运行得很好,直到一些应用程序的用户抱怨时才意识到出了问题!

非常感谢您的帮助。

最终成功了,我只是在主项目中缺少了对后台任务项目的引用。在那之前的某个时刻,我一定是无意中删除了它。

为了进一步说明没有引用它,没有正确的TaskEntryPoint命名空间和类名也会导致此错误。对我来说,我把类名拼错了。

最新更新