【问题标题】:winrt - System.UnauthorizedAccessExceptionwinrt - System.UnauthorizedAccessException
【发布时间】:2012-09-06 11:22:51
【问题描述】:

我正在尝试写入和读取 Win8 的本地存储。使用帮助程序我能够成功写入我的机器,但读取 .xml 文件给了我一个:System.UnauthorizedAccessException 发生在 mscorlib.dll 错误

我创建了一个代码粘贴,以便您查看我的代码。

http://codepaste.net/k9mht5

代码在这里失败:

public async static Task<object> LoadData(string path, System.Type type)
{
    var _Folder = Windows.Storage.ApplicationData.Current.LocalFolder;

    try
    {
        var _File = await Folder.GetFileAsync(path);

        using (IInputStream inStream = await _File.OpenSequentialReadAsync())

        {
            // Deserialize the Session State
            XmlSerializer x = new XmlSerializer(type);
            return x.Deserialize(inStream.AsStreamForRead());
        }
    }
    catch (Exception ex)
    {
        MessageDialog dialog = new MessageDialog(ex.Message.ToString());
        dialog.ShowAsync();            
        return null; 
    }
}

具体在这一行:

 using (IInputStream inStream = await _File.OpenSequentialReadAsync())

如果您对我做错了什么有任何想法,那将对我有很大帮助。
我在 Release Preview 中执行此操作。如果我需要提供任何其他系统信息,请告诉我。

【问题讨论】:

  • 你忘了实际使用 _Folder 变量。

标签: windows-8 windows-runtime


【解决方案1】:

好的,这就是我注意到的。在文件vehicleViewModel.cs 中,您一个接一个地调用SaveList();GetList();。这两种方法都被声明为async void,这意味着一劳永逸。我的想法是,当 SaveList 尝试保存时,GetList 尝试同时读取一个文件。我试过你的代码,我也得到了同样的错误。尝试将 SaveList 和 GetList 方法更改为async Task,然后使用await

await SaveList();
await GetList();

这对我有用。

【讨论】:

  • 1000 谢谢!我今晚要试试这个。无论如何,这看起来是我需要的答案。我通常不会同时保存和获取,但是为了测试这个帮助代码,我需要先获取数据,然后再读取它。今晚我尝试后将其标记为答案!再次感谢!
【解决方案2】:

使用调度程序它将解决您的问题

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.High, () => { // Your UI update code goes here! _dialogService.ShowMessage(rdm.ErrorMessage); });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多