2013-12-22 3 views
0

진행률 표시 줄을 제 모양으로 만들고 싶었습니다.하지만 실행하면 진행률 표시 줄이 멈추고 끝으로 이동하지 않습니다.진행 표시 줄이 멈추었습니다. C#

모든 솔루션?

감사합니다. 당신이 값의 변경되지 않는 한

private void WelcomeScreen_Load(object sender, EventArgs e) 
     { 
      progressBar1.Minimum = 0; 
      progressBar1.Maximum = 100; 
      progressBar1.Step = 5; 
      progressBar1.PerformStep(); 
     } 
+1

PerformStep()을 백그라운드 스레드에서 실행해야합니다. –

+0

위의 코드는 작동하지만 한 번만 실행되므로 가능한 범위 인 0-100에서 5가 증가합니다. 그러나 그것은 실제로 움직입니다, 정확한 행동은 무엇인지, 가능한 한 최선이라고 설명하십시오. 편집 : @Garry Vass, 왜 현재 스레드에서 진행률 표시 줄의 값을 변경할 수 없습니까? –

답변

0

이 붙어 있습니다 : 여기

는 코드입니다. 그것이 가치가있어 변화시키지 않으려면.

+0

그는 이전에 5로 정의 된 단계를 수행하므로 코드는 다음과 같습니다. progressBar.Value + = 5; –

+0

이것은 거의 대답이 아닙니다. 적어도 무엇이 잘못되었으며 어떻게 해결해야하는지 알려줍니다. 그것이 지금과 같이, 그것은 주석으로서 더 좋을 것이다. – psubsee2003

1

PerformStep 한 번만 전화하기 때문에 진행률 표시 줄이 멈 춥니 다. PerformStep으로 전화하면 진행률 표시 줄의 값이 5 씩 증가합니다 (5로 설정했기 때문에).

진행률 막대를 더 많이 이동하려면 PerformStep에 더 자주 전화해야합니다.

예를 들어 백그라운드에서 작동하는 백그라운드 작업자 스레드가있는 경우 작업에 소요되는 시간을 사용자에게 알려야합니다. 진행 상황을 보여주고 싶다고 느낄 때마다 PerformStep으로 전화 할 수 있습니다.

샘플 코드 :

... 
progressBar1.Step = 5; 

InitTheWork(); 

progressBar1.PerformStep(); //This increments the pb's value by 5, since property `Step` has been set to 5 

DoSomeHeavyWork(); 

progressBar1.Value += 20; //This increments pb's value by 20 

FinalizeWork(); 

progressBar1.Value = 100; //This fully fills up the progress bar, to signify that the work has been completed. 
0

진행 표시 줄은 그 자체로 "이동"되지 않습니다. PerformStep()을 호출 할 때마다 변경해야합니다. 현재 코드를 사용하여 PerformStep()을 20 회 호출하면 완료된 것으로 표시되어야합니다. 리소스가 많은 프로세스의 어떤 시점에서 진행률 표시 줄을 업데이트하는 것이 바람직한지 스스로 찾아야합니다. 그것은 다음과 같이 보일 수 있습니다 :

당신은 아마이이 같은 스레드의 경우 시간이 오래 복용하고 Welcome_Screen_Load를 호출하는 것보다 다른 스레드에서 그 진행 막대를 표시하도록 요구하고 무엇이든 할 것입니다
PerformTask1(); 
progressBar1.PerformStep(); 
PerformTask2(); 
progressBar1.PerformStep(); 
PerformTask3(); 
progressBar1.PerformStep(); 
... 

사용자 입력 및 GUI 업데이트를 처리하므로 로딩 화면이 응답하지 않을 수 있습니다.

관련 문제