2
我有一個UWP應用程序,我試圖從本地文本文件存儲和檢索一些數據,但無論我如何嘗試這樣做,應用程序都會死鎖。由於需要同步的東西發生,我嘗試使用任務並等待其完成,但是應用程序仍然鎖定。如何解決這個僵局?
我在叫「的MainPage」 UWP應用和它的構造函數有一個網頁,我有以下代碼:
var listenkeyViewModel = new ListenkeyViewModel();
listenkeyViewModel.GetKey();
listenkey = listenkeyViewModel.Listenkey;
的get關鍵是這裏的問題,因爲它調用視圖模型的方法(這我創建是同步的,因爲我認爲進行調用同步儘快將是可取的。
public void GetKey()
{
try
{
var listenKeyTask = RetrieveListenKey();
_listenkey = listenKeyTask.Result;
}
catch (Exception e)
{
}
}
public static async Task<string> RetrieveListenKey()
{
try
{
var storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var listenkeyFile = await storageFolder.GetFileAsync("listenkey.txt");
return await Windows.Storage.FileIO.ReadTextAsync(listenkeyFile);
}
catch (Exception e)
{
throw new Exception("Could not load file");
}
}
我知道事情是「異步一路下跌」,但在這裏,這是不可能的。我不能讓構造,其中原始代碼是異步的,你好嗎?應該不會陷入僵局?我不明白。
將代碼從構造函數中移開。使用像「InitializeAsync」之類的異步方法。這是最好的解決方案。 –