Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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# FileIO.WriteAsync挂起_C#_Windows_Io_Windows 8_Windows Store Apps - Fatal编程技术网

C# FileIO.WriteAsync挂起

C# FileIO.WriteAsync挂起,c#,windows,io,windows-8,windows-store-apps,C#,Windows,Io,Windows 8,Windows Store Apps,我正在尝试开发一个基本的Windows8应用商店应用程序,只需创建一个新文件并向其中写入一些示例数据。但是,当我运行我编写的函数时,应用程序会挂起并变得无响应。我尝试了两种不同的文件创建方法,它们都具有相同的效果: 使用漫游文件夹: Windows.Storage.StorageFolder roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder; StorageFile file = await roaming

我正在尝试开发一个基本的Windows8应用商店应用程序,只需创建一个新文件并向其中写入一些示例数据。但是,当我运行我编写的函数时,应用程序会挂起并变得无响应。我尝试了两种不同的文件创建方法,它们都具有相同的效果:

使用漫游文件夹:

Windows.Storage.StorageFolder roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder;
StorageFile file = await roamingFolder.CreateFileAsync("test.txt",CreationCollisionOption.ReplaceExisting);
string[] data = { "New project", "000000000" , "" };
await FileIO.WriteTextAsync(file, data[0]);
return new Project(file.Path, "New project", "", Windows.UI.Color.FromArgb(255, 0, 0, 0));
使用文件选择器:

Windows.Storage.Pickers.FileSavePicker fsp = new Windows.Storage.Pickers.FileSavePicker();
        fsp.FileTypeChoices.Clear();
        fsp.FileTypeChoices.Add("Plain Text", new List<string>() { ".jwp" });
        fsp.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
        fsp.SuggestedFileName = "New Project";
        StorageFile file = await fsp.PickSaveFileAsync();
        if (file != null)
        {
            string[] data = { "New project", "000000000" , "" };
            CachedFileManager.DeferUpdates(file);
            await FileIO.WriteLinesAsync(file, data);
            Windows.Storage.Provider.FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);
            if (status == Windows.Storage.Provider.FileUpdateStatus.Complete)
            {
                return new Project(file.Path, "New project", "", Windows.UI.Color.FromArgb(255, 0, 0, 0));
            }
            else
            {
                return null;
            }
        }
        else
        {
            return null;
        }
或:

分别


有人知道这是怎么回事吗?我在选取器中选择的驱动器上肯定有空间,我甚至可以看到选取器方法确实在创建一个文件(尽管大小为0字节),但我真的什么也做不了。

我怀疑在调用层次结构的某个地方,您正在同步阻止一个异步方法(例如,
Task.Wait
Task.Result

这将防止方法继续同步回UI线程,从而导致死锁

要解决此问题,需要遵循两条准则:

  • 一直使用
    async
    。不要阻塞
    async
    代码。替换
    任务。等待
    /
    任务。结果
    等待
    并允许其增长
  • 配置您的上下文。如果您的
    async
    方法在
    wait
    之后不需要访问UI元素(或数据绑定属性),请使用
    configurewait(false)

  • 第一种方法对我来说很好。你有任何异常吗?删除代码直到它开始工作,看看触发错误需要哪些代码。或者创建一个全新的项目,将可疑行添加到其中并运行它。它仍然挂起吗?可能没有。
    await FileIO.WriteTextAsync(file,data[0]);
    
    await FileIO.WriteLinesAsync(file,data);