从其 winrt 组件获取 Windows 8.1 通用应用程序状态/public 变量访问

Get Windows 8.1 universal app state / public variable access from its winrt component

我有一个通用 Windows 平台应用程序,为了进行背景检查,我使用 winrt 组件(解决方案中的单独项目)。我正确注册了它,系统每 15 分钟启动一次我的 winrt class。问题是我的应用程序使用相同的文件并进行与后台检查程序相同的检查。所以我需要知道我的应用程序是否处于活动状态(后台或前台)以跳过后台检查以避免多线程文件访问。 有什么方法可以从 winrt 组件访问我的应用程序状态,或者查询系统我的应用程序是否处于活动状态?

自周年更新以来,现在可以 运行 从与主应用程序相同的进程中执行后台任务。后台任务和主应用程序共享相同的内存。有关如何执行此操作的信息,请参阅 Create and register a single-process background task

如果您想将后台任务保留在与主应用程序不同的进程中,那么您可以使用命名为 EventWaitHandle:

前台应用代码

// Keep this handle alive for the duration of your app
eventHandle = new EventWaitHandle(true, EventResetMode.ManualReset, "MyApp");

后台应用代码

EventWaitHandle handle;

if (EventWaitHandle.TryOpenExisting("MyApp", out handle)) {
    // Foreground app is running
} else {
    // Foreground app is not running
}

你需要注意这里可能存在的竞争条件(如果这对你的情况来说是个问题)。您可以更好地利用 EventWaitHandle 来同步两个进程需要执行的任何文件任务。