2016-09-19 1 views
0

응용 프로그램 시작시 DB에서 일부 데이터를로드하려고합니다.시작시 WPF 응용 프로그램에서의 긴 작업

내가 원하는 것은 메인 윈도우를 먼저 진행률 표시 줄로 표시하고 작업이 실행되는 동안 "데이터로드 중"과 같은 상태 텍스트를 표시하는 것입니다.

어떻게해야합니까? 내가 MainWindow에 백그라운드 작업자가

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(); 
     } 

, 거기에 내 방 창문 모델을 초기화 :

나는 Application_Startup에서 내 DB 연결 (DbConn)와 MainWindow 자체를 initilizing있어

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)를 실행해야합니까?

DB에서 선하 데이터의 논리

현재 MyModel 측에 배치되고, 진행은 콜백으로보고됩니다

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

이 OK가 그렇게 할 수 있습니까?

지구상에서 모범 사례를 사용하여 어떻게 구성해야합니까?

답변

1

프로세스를 시작하기 전에 표시된 MainWindow를 갖기 위해 MainWindow.ContentRendered 이벤트를 사용하여보기가 배치되어 표시 될 때 시작되는 프로세스를 시작합니다.

관련 문제