在C#UWP中加载.txt文件

时间:2016-12-02 19:49:16

标签: c# uwp uwp-xaml

我正在尝试为我的UPW应用打开一个.txt文件。

string text;
private async void OpenFile(string fileName)
{            
   StorageFolder localFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync("Beginner");
   try
   {
       StorageFile file = await localFolder.GetFileAsync(fileName + ".txt");                     
       text = await FileIO.ReadTextAsync(file);
       PrintMessage(text);
   }
   catch (Exception)
   {
      PrintMessage("Failed to load file");                
   }
}

public async void PrintMessage(string message)
{
   //Writes message
   MessageDialog msg = new MessageDialog(message);
   await msg.ShowAsync();
}  

public Main() 
{
   OpenFile("WordList");
   PrintMessage(text);
}

PrintMessage(text);之后ReadTextAsync时,代码运行正常。当我删除它时,程序将在大多数时间冻结。当我在调试器中运行它时,它主要完成,但有时它会在行StorageFile file = await localFolder.GetFileAsync(fileName + ".txt");处冻结。我相信异步魔法存在一些问题。

此外,text中的Main()变量几乎总是 null,即使它应包含文件的文本。 我需要的只是一个能够可靠地打开.txt文件并返回该文件的内容的函数(返回返回,或者像这样返回全局)。我尝试使用Task<>,但我无法让它工作......

编辑: 我试过了

string text { get; set; }
public async void OpenFileAssist(string fileName)
    {
        await OpenFile(fileName);
    }

public async Task OpenFile(string fileName)
{
    StorageFolder localFolder = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync("Beginner");
    try
    {
        StorageFile file = await localFolder.GetFileAsync(fileName + ".txt");
        text = await FileIO.ReadTextAsync(file);
    }
    catch (Exception)
    {
        PrintMessage("File does not exist");
    }
}

但它仍然不起作用......当我从Main()调用OpenFileAssist()时,文本变量仍为null。 :(如果我在调试器中打开它并一步一步地运行它,但是。

我使用

获得了解决方案

private async void Page_Loaded(object sender, RoutedEventArgs e)

1 个答案:

答案 0 :(得分:0)

请参阅this page,尤其是使用TaskScheduler.FromCurrentSynchronizationContext()的示例。它对我帮助很大。

相关问题