You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Uno Platform调用ApplicationData.Current.LocalFolder时对象状态无效问题排查

问题

我拥有一个Uno Platform项目,其TargetFrameworks配置为net7.0-windows10.0.1901;net7.0。我尝试使用Windows.Storage命名空间下的API实现跨平台本地存储,代码如下:

public static async Task<T?> RetrieveDataAsync<T>(string filename)
{
    if (!string.IsNullOrEmpty(filename))
    {
        try
        {
            StorageFolder localFolder = ApplicationData.Current.LocalFolder;
            StorageFile storageFile = await localFolder.GetFileAsync($"{filename}.json");
            string serializedData = await FileIO.ReadTextAsync(storageFile);
            return JsonSerializer.Deserialize<T>(serializedData);
        }
        catch (Exception ex)
        {
            string msg = ex.Message;
        }
    }
    return default(T);
}

但针对Windows平台构建时,在StorageFolder localFolder = ApplicationData.Current.LocalFolder;行出现错误提示“Operation is not valid due to the current state of the object”。Uno官方文档显示该API支持全平台,请问错误成因是什么?

错误成因分析
  • ApplicationData初始化时机错误:在Windows平台的WinUI 3/Desktop场景中,ApplicationData.Current必须在UI线程且应用完成初始化后才能访问。如果代码在应用启动早期(比如App构造函数、无UI上下文的后台线程)调用,就会触发状态无效错误。
  • TargetFramework配置优先级冲突:项目同时指定net7.0和net7.0-windows10.0.1901,Windows编译时可能优先使用通用net7.0的兼容实现而非WinRT原生API,导致ApplicationData无法正确获取。建议调整TargetFramework顺序,将Windows特定框架放在首位,或通过条件编译单独处理Windows平台逻辑。
  • 应用存储上下文异常:若项目采用非MSIX打包的桌面exe形式,或是意外禁用了本地文件访问权限,ApplicationData对应的沙箱存储环境无法正常加载,进而引发错误。
  • 静态方法调用时机不当:你的方法是静态方法,若在UI组件未完成初始化前调用(比如页面未加载时),ApplicationData的上下文尚未建立,就会抛出该错误。建议将数据读取逻辑延后到页面加载完成事件(如OnNavigatedTo)中执行。

内容的提问来源于stack exchange,提问作者Robotuner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:43:24