2013-07-19 2 views
0

내 간단한 프로그램에서 하나의 진행률 막대와 하나의 단추가 있습니다.데이터베이스에서 두 개 이상의 테이블을 읽는 동안 진행 막대를 재설정하면

이제이 버튼은 내 데이터베이스에서 2 개의 테이블을 읽습니다 (예 : mysql).

2 개의 다른 테이블을 읽는 데 필요한 2 개의 간단한 select 문.

내 질문은 내가이 /가 첫 번째 테이블을 선택 읽어 후, 진행률 표시 줄의 값이 0으로 재설정하고 다음 테이블을 읽고 계속도 다시 증가합니다 있도록 진행 표시 줄을 구현할 수있는 방법을

입니다 진행률 표시 줄?

이 기능은 일부 응용 프로그램을 설치할 때 매우 유사합니다. 복사 할 모든 파일에는 진행률이 있지만 진행률 표시 줄은 하나만 사용됩니다.

예제를 제공 할 수 있다면 도움이 될 것입니다.

당신은뿐만 아니라 당신은해야합니다

+0

이 방법을 왜 그것은 작동하지 않은 것 예상했다. 이것은 backgroud worker 구현에 대한 MSDN 문서입니다. http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx –

+0

MSI에서 진행률 막대가 작동하는 방식은 오히려 주요 UI 블로퍼입니다. 아무도 복사하려고 시도해서는 안되는 것. 결과 집합에 몇 개의 레코드가 있는지 모르는 경우 마키 스타일 진행률을 사용하십시오. –

답변

0

BackgroundWorker에 함께 제공 할 수 있다면 훨씬 더 좋은 아이디어 : 질문이있는 경우 은 알려 주시기 바랍니다.

async private void Button_Click_1(object sender, RoutedEventArgs e) 
     { 
      await Task.Factory.StartNew(ExecuteSQL1); 
      UpdateProgressBar(0); 
      await Task.Factory.StartNew(ExecuteSQL2); 
      UpdateProgressBar(0);    
     } 

private void ExecuteSQL1() 
     { 
      for (int i = 0; i < 100; i++) 
      { 
       int progressBarValue = i; 
       Task.Factory.StartNew(() => UpdateProgressBar(progressBarValue), CancellationToken.None, TaskCreationOptions.None, uiScheduler); 
       Thread.Sleep(50); 
      } 
     } 

private void ExecuteSQL2() 
     { 
      for (int i = 0; i < 100; i++) 
      { 
       int progressBarValue = i; 
       Task.Factory.StartNew(() => UpdateProgressBar(progressBarValue), CancellationToken.None, TaskCreationOptions.None, uiScheduler); 
       Thread.Sleep(100); 
      } 
     } 

TaskScheduler uiScheduler; 

     public MainWindow() 
     { 
      InitializeComponent(); 

      uiScheduler = TaskScheduler.FromCurrentSynchronizationContext(); 
     } 
0

1). 데이터베이스를 읽을 때 정확한 진도를 얻기 위해 얼마나 많은 항목을 받을지 모릅니다. 따라서 SQL 서버에서이 정보가 필요합니다. 제발, Report progress from SQL Server을 읽으십시오.

2). BackgroundWorker을 사용하는 방법은 DEV N00B의 의견에 매우 잘 설명되어 있습니다. 이 쿼리를 실행하려면 나는 각 쿼리에 대한 자신의 DoWork 기능과 별도의 작업자를 생성하고 그들에게 전화 당신은 당신이 지금까지 시도 것의 몇 가지 예를 추가해야합니다

private void worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    this.progressBar1.Value = 0; 

    Thread.Sleep(1000); 

    if (worker2.IsBusy != true) 
    { 
    worker2.RunWorkerAsync(); 
    } 
} 
관련 문제