我想爲我的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)
設置你的'async'方法返回類型到'Task',你的調試器是否顯示任何異常?你也調用異步代碼而不在Main Main中等待它,這就是爲什麼PrintMessage會返回null。 – ColinM
我嘗試使用任務,但它並沒有幫助,當我卡住了試圖返回文本。它正在迴避任務,而不是字符串。 (不能將類型'System.Threading.Tasks.Task'隱式轉換爲'string')。如果我爲PrintMessage(「Hello」)指定一個字符串,但文本變量爲null,則Print Message正常工作 –
9motom6
如果您要返回任務,那麼您必須從其他方法(而不是構造函數)調用OpenFile,也是'async',然後'await'調用'OpenFile'來打開結果,這是一個'字符串' –
ColinM