Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OpenStreamForWriteAsync不';完不成_C#_Windows_Uwp - Fatal编程技术网

C# OpenStreamForWriteAsync不';完不成

C# OpenStreamForWriteAsync不';完不成,c#,windows,uwp,C#,Windows,Uwp,我正在尝试将序列化对象保存到文件中。当我调用OpenStreamForWriteAsync方法时,UI会被锁定,整个过程似乎永远不会结束。我不知道我做错了什么 public async Task<string> Save(string fileName) { MemoryStream ms = new MemoryStream(); var serializer = new DataContractSerializer(

我正在尝试将序列化对象保存到文件中。当我调用
OpenStreamForWriteAsync
方法时,UI会被锁定,整个过程似乎永远不会结束。我不知道我做错了什么

            public async Task<string> Save(string fileName)
    {
        MemoryStream ms = new MemoryStream();
        var serializer = new DataContractSerializer(typeof(Settings));

        serializer.WriteObject(ms, this);

        ms.Position = 0;

        try
        {
            using (var fms = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(fileName, CreationCollisionOption.ReplaceExisting))
            {
                serializer.WriteObject(fms, this);
                return "Saved successfully";
            }
        }
        catch
        {
            return "Could not save.";
        }

    }
公共异步任务保存(字符串文件名)
{
MemoryStream ms=新的MemoryStream();
var serializer=新的DataContractSerializer(typeof(Settings));
serializer.WriteObject(ms,this);
ms.Position=0;
尝试
{
使用(var fms=wait ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(文件名,CreationCollisionOption.ReplaceExisting))
{
serializer.WriteObject(fms,this);
返回“保存成功”;
}
}
抓住
{
return“无法保存。”;
}
}

这是我关于StackOverflow的第一个问题,但我已经学了很长时间了。感谢您的帮助。

发现了问题。调用此方法时,我没有等待。需要使用以下命令调用该方法:

string result =  await Settings.Save("settings.xml");

将把方法重命名为
SaveAsync
,作为提醒。

您已经将对象序列化到内存流中,不想只将内存流写入异步文件,而不想再次调用序列化程序吗?是的,我只想将内存流写入一个文件。我没有安装Metro开发环境,因此我无法测试您正在执行的操作的精确副本,而是替换了line
serializer.WriteObject(fms,this)
等待ms.CopyToAsync(fms)应该可以工作。