WinRT后台任务

时间:2015-12-09 06:56:54

标签: c# windows-runtime windows-store-apps uwp winrt-component

我试图保存从WinJs传递的配置(json字符串)并在backgroundTask中读取此配置。我声明了静态变量,所以我可以从后台任务读取值,但它返回null。

存储配置的类:

public sealed class BackgroundTaskConfiguration
{
    internal static string jsonString;

    public static IList<Config> TileConfig { get; set; }

    public static void SaveTileConfig(string jsonConfig) {

        TileConfig = new List<Config>();
        jsonString = jsonConfig;

        JsonArray jsonArray;
        if (JsonArray.TryParse(jsonConfig, out jsonArray))
        {
            foreach (var item in jsonArray)
            {
                TileConfig.Add(Config.Create(item.GetObject()));
            }
        }
    }

    public static IList<Config> GetConfig() {
        return TileConfig;
    }
}

然后,我只是简单地阅读BackgroundTask方法,如

 var confg = BackgroundTaskConfiguration.TileConfig;

或者

var confg = BackgroundTaskConfiguration.GetConfig();

这两行都返回null。 有什么不明白的地方吗?感谢

2 个答案:

答案 0 :(得分:1)

我猜您在前端调用SaveTileConfig,并期望静态值自动在后台任务中可用?

不幸的是,它不是如何运作的。将后台任务和主应用程序视为在不同上下文中运行的不同程序。它们只有共同点,它们运行在同一设备和同一文件夹中。

解决方案是将TileConfig序列化并保存在某个文件中,然后在后台任务中加载和反序列化它。没有其他方法可以在bg task + foreground app之间共享数据。

答案 1 :(得分:0)

您没有为 TileConfig 分配内存。如果你打电话

var confg = BackgroundTaskConfiguration.GetConfig();

调用后方法: SaveTileConfig ,则不会为空。 您可以在方法 SaveTileConfig 中为属性 TileConfig 分配内存。