WinRT后台任务中类的静态值为Null

本文关键字:Null 静态 后台任务 WinRT | 更新日期: 2023-09-27 18:26:15

我正在尝试保存从WinJs传递的配置(json字符串),并在backgroundTask中读取此配置。我声明了静态变量,这样我就可以从后台Task中读取值,但它返回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。有什么不正确的地方吗?感谢

WinRT后台任务中类的静态值为Null

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

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

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

您不为TileConfig分配内存。如果你打电话给

var confg = BackgroundTaskConfiguration.GetConfig();

在调用方法:SaveTileConfig之后,将不为null。您可以在方法SaveTileConfig中为属性TileConfig分配内存。