2016-12-02 93 views
0

我想爲我的UPW應用程序打開一個.txt文件。在C#中加載.txt文件UWP

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); 
} 

的代碼運行正常,當我ReadTextAsync後有PrintMessage(text);。當我刪除它時,程序大部分時間都會凍結。當我在調試器中運行它時,它大部分完成,但有時它會在線StorageFile file = await localFolder.GetFileAsync(fileName + ".txt");處凍結。我相信異步魔法存在一些問題。

此外,在Main()text變量幾乎總是空,即使它應該包含文件的文本。 所有我需要的是一個函數,將可靠地打開一個.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"); 
    } 
} 

但它仍然無法正常工作......當我打電話從主OpenFileAssist()()的文本變量仍然爲空。 :(如果我在調試器中打開它,一步一步走到它的工作原理,但。

我用

private async void Page_Loaded(object sender, RoutedEventArgs e)

+0

設置你的'async'方法返回類型到'Task',你的調試器是否顯示任何異常?你也調用異步代碼而不在Main Main中等待它,這就是爲什麼PrintMessage會返回null。 – ColinM

+0

我嘗試使用任務,但它並沒有幫助,當我卡住了試圖返回文本。它正在迴避任務,而不是字符串。 (不能將類型'System.Threading.Tasks.Task '隱式轉換爲'string')。如果我爲PrintMessage(「Hello」)指定一個字符串,但文本變量爲null,則Print Message正常工作 – 9motom6

+0

如果您要返回任務,那麼您必須從其他方法(而不是構造函數)調用OpenFile,也是'async',然後'await'調用'OpenFile'來打開結果,這是一個'字符串' – ColinM

回答

0

this page得到解決,特別是在使用TaskScheduler.FromCurrentSynchronizationContext()的例子,它幫助我很多