0
我有一個從菜單中打開的窗體的MDI。如何在異步加載數據值時在MDI中顯示錶單?
此表單有一個組合框,將填充從SQL查詢中檢索的值。
此刻,當我嘗試打開表單時,會有幾秒鐘的延遲,因爲表單將觸發查詢以返回值以填充組合框。
有沒有辦法讓表格彈出並在稍後填入值?
我有一個事件處理程序上的負載,用於與以下形式:
private async void RerunForm_Load(object sender, EventArgs e) {
await this.LoadDataAsync();
}
其中LoadDataAsync()方法將是爲:
private async void LoadDataAsync() {
this._batchCollection = await repo.RetrieveBatchesAsync();
this.lblLoading.Visible = false;
this.cbBatchesToRun.DataSource = this._batchCollection;
this.cbBatchesToRun.DisplayMember = "BatchNo";
this.tbBatchCode.Text = this.repo.GetBatchStringValue(((Batch)this.cbBatchesToRun.SelectedValue).BatchNo);
}
RetrieveBatchesAsync()被定義爲:
public async Task<List<Batch>> RetrieveBatchesAsync() {
var batches = await (from b in this._context.Batches
orderby b.BatchNo descending
select b).ToListAsync();
return batches;
}
由於某些原因,這仍然是所有同步的形式需要一對夫婦o與其他不檢索數據的表單相比,打開時間更長。
我缺少什麼讓表單立即打開並使其異步加載數據?實質上,我試圖做的是立即用所有控件打開表單,然後讓它填充控制數據,並隱藏我放入winform的「加載」標籤。
編輯:增加了批量檢索異步方法
你確定'RetrieveBatchesAsync()'實際上是異步的,而不是假裝異步嗎? – svick
@svick將方法定義添加到問題中。我相信它應該是異步的,因爲我使用EF來檢索它。 –
UI線程是否實際阻止,即應用程序是否停止響應?如果是的話,你可以在調試器被阻塞時暫停併發布UI線程的堆棧跟蹤嗎? – svick