2011-01-25 2 views
1

Compact .NET Framework에서 메서드 실행을 표시하는 방법을 모르겠습니다. 예를 들어, 완료하려면 다소 시간이 걸리는 경우가 있습니다 (예 : 업로드() 또는 인쇄()). 끝내기까지 다소 시간이 걸립니다. 진행률 표시 줄에 시간이 많이 걸리는 작업 (예 : 업로드()).메서드 실행을 나타내는 진행 막대

ThreadThreadPool.QueueUserWorkItembut으로 시도했지만 막혔습니다. 문제는 메서드의 스레드와 진행률 막대를 동기화하는 방법을 모르겠다는 것입니다.

도와주세요.

답변

1

나는이 도움말을 희망 :

ProgressBar pg = new ProgressBar(); 
pg.Maximum = 100; 
pg.Step = 1; 

this.Controls.Add(pg); 

new Thread(new ThreadStart(() => 
    { 
     // Replace with your code: 
     for (int i = 0; i < 100; i++) 
     { 
      if (pg.InvokeRequired) 
       pg.Invoke(new ThreadStart(() => 
        { 
         pg.PerformStep(); 
        })); 
      else 
       pg.PerformStep(); 
     } 
    })).Start(); 

이 부분이 중요하다, 또는 예외가 얻을 :

if (pg.InvokeRequired) 
    pg.Invoke(new ThreadStart(() => 
     { 
      pg.PerformStep(); 
     })); 
else 
    pg.PerformStep(); 
+0

이것은 그 것이다. 진행률 막대가 업데이트되는 동안 실행중인 메서드의 스레드를 삽입 할 위치를 고민하고 있습니다. – xplorer00

0

"메서드의 스레드와 진행률 표시 줄 동기화"란 무엇을 의미합니까? 진행률 표시 줄의 값을 변경하려고하면 예외가 발생한다고 생각할 수 있습니다. 그게 문제가있는 경우, 당신은 스레드 안전한 방법으로 사용해야 할 것입니다 : 당신은 스레드를 실행할 수 있습니다 당신은 BackgroundWorker?

보고 시도 http://msdn.microsoft.com/en-us/library/ms171728.aspx

+0

의미 : 메소드가 실행되는 동안 진행률 표시 줄이 진행되어야한다. 메소드가 종료되면 진행률 표시 줄이 중지됩니다. 또한 메소드의 실행을 시뮬레이트 할 수 있습니다. 메소드가 시작될 때 진행 표시 줄을 시작하고 메소드의 실행이 끝날 때 종료해야합니다. 예외는 없었어. – xplorer00

0

가 되세요 및 진행률 표시 줄을 업데이트합니다.

편집

이 CF를 위해,하지만 거기 찾아보기를 가진 때 내가 찾은 기사가 그리고 당신은 전에이 건너 한 경우 나도 몰라 몰랐 :

http://msdn.microsoft.com/en-us/library/aa446488.aspx

+0

소형 프레임 워크입니다. – xplorer00

+0

죄송합니다. 읽었습니다. – nik0lias

+0

문제 없음 :) 나는 그 문서를 참고 자료로 사용했습니다. 하지만 진도를 추적하는 방법에 대한 단서가 없습니다. – xplorer00

2

시간이 많이 걸리는 작업을 해당 스레드의 새 스레드로 포크화할 수 있습니다. 진행 상황을 확인하고 ProgressChanged(int actualProgress)과 같이 실행 한 다음 해당 이벤트를 UI에서 처리하고 이벤트의 값에 따라 진행률 표시 줄을 설정할 수 있습니다. 당신은 그 시점에서 어떤 파견을해야 할 것입니다.

+0

이 부분을 자세히 설명해 주시겠습니까? 비슷한 일을 시도했지만 CF 프레임 워크에는 스레드에 대한 IsAlive() 메서드가 없습니다. – xplorer00

관련 문제