我有一個表單正在從SQL服務器加載相當數量的數據。以下是將提供良好提示的代碼:WinApp表單在加載事件過程中加載太多數據
private void BranchCenter_Load(object sender, EventArgs e) {
//Combo boxes:
LoadCities();
LoadCoordinators();
LoadComputerSystems();
//Actual entity
LoadBranch();
}
private void LoadCities() {
//LINQ2SQL to load data. ~5000 records.
}
private void LoadCoordinators() {
//LINQ2SQL to load data. ~50 records.
}
private void LoadComputerSystems() {
//LINQ2SQL to load data. ~550 records.
}
private void LoadBranch() {
LoadBranchInit();
LoadBranchDetails();
LoadBranchTimings();
LoadBranchServices();
LoadBranchLocumsHistory();
LoadBranchJobs();
LoadBranchNotes();
}
private void LoadBranchInit() {
//LINQ2SQL to load the Branch object based upon the Branch ID
}
private void LoadBranchDetails() {
//LINQ2SQL to load basic branch stuff. 38 fields. Mixed editors.
}
private void LoadBranchTimings() {
//LINQ2SQL to load timings info into 80 date-time controls
}
private void LoadBranchServices() {
//LINQ2SQL to load services offered at branch info into 20 check-boxes controls
}
private void LoadBranchLocumsHistory() {
//LINQ2SQL to load branch history info into grid control. Always increasing # of rows :(
}
private void LoadBranchJobs() {
//LINQ2SQL to load branch jobs info into grid control. Always increasing # of rows :(
}
private void LoadBranchNotes() {
//LINQ2SQL to load branch notes info into grid control
}
UI是帶有選項卡控件的窗體。上面的每個細節都轉到標籤頁。我需要儘快加載並向用戶顯示錶單。一旦顯示錶格,我需要啓動一系列後臺工作人員來獲取每個頁面的數據。
我一直在試圖弄亂後臺工作人員,但無法理解它的用法。我最終得到了「不同線程嘗試訪問您的主線程控制......」或類似的東西......「
理想的情況是有一個進度條加載每個選項卡上的數據和一旦相應的後臺工作者完成,標籤就會變爲可互動的。
任何策略或建議?感謝您的閱讀。
在e.Result中,數據太多以至於不能很好地表現出來......但我只能在實際嘗試變形後才能回來。 – DoomerDGR8
爲什麼太多?無論您想如何異步獲取,都必須在非GUI線程中將其收集到某個變量中,然後調用UI線程並使用數據更新UI。 BackgroundWorker實際上是這樣做的。如果你使用Thread,你可以更靈活,但它可能不值得麻煩。所以,我不確定我是否已經用一些真正的大型數據集嘗試過BackgroundWorker,但是除非它們對於計算機內存來說太大,否則我不會看到任何不好的事情會發生。 –