2016-09-19 5 views
0

Я хочу, чтобы некоторые данные загружались из БД при запуске приложения.Длительная работа при запуске WPF-приложения

Что я хочу - сначала показать главное окно, индикатор выполнения и текст состояния, как «данные загружаются» во время работы.

Как мне это сделать на самом деле?

Я initilizing моего подключения к БД (DbConn) и сам MainWindow от Application_Startup:

protected void Application_Startup(object sender, StartupEventArgs e) 
     { 
      DbConn= new DBConnection(); 
      System.Threading.Thread.CurrentThread.CurrentUICulture = DbConn.GetLocalCulture(); 
      System.Threading.Thread.CurrentThread.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture; 
      main = new MainWindow(); 
      main.Show(); 
     } 

У меня есть фон работник на MainWindow и инициализация моей модели окна есть:

public MainWindow() 
     { 
      DataContext = new Models.MyModel(App.DbConn); 
      InitializeComponent(); 
      BgWLoad = new BackgroundWorker(); 
      BgWLoad.WorkerSupportsCancellation = false; 
      BgWLoad.DoWork += BgwLoad_DoWork; 
      BgWLoad.ProgressChanged += BgwLoad_ProgressChanged; 
      BgWLoad.RunWorkerCompleted += BgwLoad_RunWorkerCompleted; 
} 

Где я должен работать мой рабочий (BgWLoad.RunWorkerAsync)?

Логика коносамент данных из БД в настоящее время находится на MyModel стороне, и прогресс сообщается как обратного вызова:

private void BgwLoadQK_DoWork(object sender, DoWorkEventArgs e) 
     { 
      StatusText.Text = Properties.Resources.msgLoadingKeySets; 
      Model.Init((double progress) => 
      { 
       ((BackgroundWorker)sender).ReportProgress(Convert.ToInt32(progress)); 
      }); 
     } 

ли это ОК, чтобы сделать это?

Или как на Земле это должно быть организовано с использованием передовой практики?

ответ

1

Чтобы показать MainWindow перед запуском процессов, я использую событие MainWindow.ContentRendered, чтобы запустить процесс, который запускается, когда представление выложено и показано.

Смежные вопросы