【问题标题】:Null static value from class inside WinRT background taskWinRT 后台任务中类的空静态值
【发布时间】:2016-03-14 08:29:48
【问题描述】:

我正在尝试保存从 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。 有什么不正确的线索吗?谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      var confg = BackgroundTaskConfiguration.GetConfig();
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-26
        • 2013-02-25
        相关资源
        最近更新 更多