二十、异步调用的问题
生活随笔
收集整理的這篇文章主要介紹了
二十、异步调用的问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
問題描述:
我們在SampleDataSource的構(gòu)造函數(shù)中,將里邊的示例代碼全部刪除,然后添加異步方法LoadFile,即
public SampleDataSource(){LoadFile();},但是運行結(jié)果卻是Group的數(shù)據(jù)被加載了,但是其中的數(shù)據(jù)項未被加載,也就是說數(shù)據(jù)不顯示。原因:
這是典型的異步調(diào)用錯誤。原因也很簡單,是因為SampleDataSource的構(gòu)造函數(shù)是同步調(diào)用,不會等LoadFile結(jié)束后再返回,所以,當界面上顯示數(shù)據(jù)時,顯示的只是未加載完成的數(shù)據(jù)列表。
解決方法:
方法一:
由于構(gòu)造函數(shù)無法變成async調(diào)用方法,所以只能用另外的一個顯式初始化函數(shù)來替代構(gòu)造函數(shù)的作用,在數(shù)據(jù)顯示之前,顯式地調(diào)用該初始化函數(shù)。所以,我就直接將LoadFile作為這個初始化函數(shù),為LoadFile增加public,static和async關(guān)鍵字。
然后,我們打開GroupItemsPage.xaml.cs文件,找到LoadState方法。該方法用來設(shè)置當前視圖的數(shù)據(jù)源,所以,我們在LoadState方法的頂部顯式調(diào)用SampleDataSource.LoadFile方法。當然,我們會得到一個編譯錯誤,因為LoadState方法也是一個同步調(diào)用函數(shù),簡單地為LoadState方法增加一個async的關(guān)鍵字就可以解決這個問題。
方法二:
public SampleDataSource()
{
_LoadFile();
}
private async Task _LoadFile()
{
await LoadFile();
},
轉(zhuǎn)載于:https://www.cnblogs.com/suinuaner/archive/2013/01/23/twenty.html
總結(jié)
以上是生活随笔為你收集整理的二十、异步调用的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL 学习
- 下一篇: Struts2(批量类型转换器strut