У меня есть форма, которая загружает большое количество данных с сервера SQL. Ниже приведен код, который даст хороший совет:
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
}
Пользовательский интерфейс представляет собой форму с элементами управления вкладкой. каждая деталь сверху идет на вкладку. Мне нужно как можно быстрее загрузить и показать форму пользователю. как только форма показывается, мне нужно запустить ряд фоновых работников, чтобы получить данные для каждой страницы.
Я пытался связываться с фоновым работником, но не мог понять, как он используется. Я заканчиваю тем, что получаю сообщение «другая нить пыталась получить доступ к управлению вашей основной нитью ... или что-то в этом роде ...»
Идеальной ситуацией будет наличие индикатора выполнения, загружающего данные на каждую вкладку, и вкладка станет взаимодействующей после завершения работы соответствующего фонового рабочего.
Любая стратегия или совет? Спасибо за прочтение.