我開始探索異步和C#5.0等關鍵字,所以我做了使用的WinForms一些測試運行,但現在我的情況很卡:發佈UI線程同時長的方法是使用的await和異步
我的觀點是從數據庫運行查詢,而查詢未完成時,我想在窗體上顯示加載gif。
這是查詢數據庫的方法:
public static async Task<List<string>> GetItensFromDatabase()
{
List<string> names = new List<string>();
using (ServerConn)
{
ServerConn.Open();
SqlCommand cmd = new SqlCommand("Select * From Names", ServerConn);
var ds = new DataSet();
var adapter = new SqlDataAdapter(cmd);
adapter.Fill(ds); // this call lasts about 1 minute
foreach (DataRow dr in ds.Tables[0].Rows)
{
names.Add(dr["Name"].ToString());
}
}
return names;
}
我這樣稱呼這裏是方法:
private async void button1_Click(object sender, EventArgs e)
{
List<string> itens = null;
itens = await AsyncMethods.GetItensFromDatabase(); // I want that the form dont be stuck here
ShowItensInListView(itens);
}
現在我有一個旋轉,直到窗體上的無所不在的加載圖像GIF調用方法GetItensFromDatabase,當方法運行時gif停止,當方法結束時gif開始再次旋轉。
因此,在GetItensFromDatabase方法運行時,保持gif旋轉的一些方法?
GIF在哪裏? – Lloyd
只是把'async'打到一個方法不會使它自動地異步/非阻塞... –