c# - 在 Windows Phone 8.1 中以编程方式检测重启

标签 c# windows-phone-8.1 background-process

我有一个 WP 8.1 运行时,它启动一个 DeviceUseTrigger 后台任务。问题是,每当手机重新启动时,这个任务显然会取消,但任务注册仍然存在。因此,当我下次启动我的应用程序时,后台任务看起来正在运行,但实际上并没有。我想要某种方法来检测手机何时重新启动和/或以某种方式检测任务是否实际运行。我用来检查后台任务注册的代码如下:

foreach(IBackgroundTaskRegistration task in BackgroundTaskRegistration.AllTasks.Values)
        {
            if ((task as BackgroundTaskRegistration).Name == myTaskName)
            {
                Debug.WriteLine("Task is already running");
            }
        }

最佳答案

我能够以一种几乎令人尴尬的简单方式解决问题。手机关机时后台任务取消,所以我将事件处理程序附加到后台任务中的 taskInstane.Canceled 事件,并向其中添加两行:

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("TaskCancelling.txt" CreateCollisionOption.OpenIfExists);
deferral.Complete();

然后,在前台应用程序中,只要应用程序启动,就会运行以下代码:

foreach(IBackgroundTaskRegistration task in BackgroundTaskRegistration.AllTasks.Values)
{
   if ((task as BackgroundTaskRegistration).Name == myTaskName)
   {
      if (await IsFilePresentInLocalDirectory("TaskCancelling.txt"))
      {
         //Task registration is present, but task isn't actually running.
         //Unregister the useless task
         (task as BackgroundTaskRegistration).Unregister(true);
         //Delete the file
         StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("TaskCancelling.txt");
         await file.DeleteAsync();
         //Relaunch the DeviceUseTrigger task
         RelaunchBackgroundTask();
      }
   }
}

private async Task<bool> IsFilePresentInLocalDirectory(string fileName)
{
   try
   {
      StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
      return true;
   }
   catch (Exception exc)
   {
      return false;
   }
}

不言自明,我只是创建了一个空文本文件来创建一种任务取消日志,每次我的应用程序启动时,我都会检查文件是否存在。如果是,则重新启动任务并删除文件。

关于c# - 在 Windows Phone 8.1 中以编程方式检测重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29717798/

相关文章:

visual-studio-2013 - .net WP8.1/Win10 UWP : Namespace for MapControl not found in Visual Studio Designer

windows-phone-7 - Windows 10 上的 Windows Phone 应用程序

objective-c-blocks - handleEventsForBackgroundURLSession 内的completionHandler定义:

c# - LINQ 使用 where 子句循环访问 C# 中的不同数组

c# - C# 中的异步 http 请求

c# - 在 Windows Phone 8.1 XAML 中获取 Windows Phone 版本和设备名称

iphone - 在后台播放音频流

java - 后台运行进程日志记录

c# - 如何将这 4 个 SQL 表转换为 OO 类(Java 或 C#),但不使用 NHibernate/LINQ?

java - Selenium 测试: Method Not Allowed error