2009-11-08 3 views
2

라이브러리에 노래를로드하는 프로그램의 상태를 보여주는 진행률 표시 줄이 있습니다.진행률 막대 C#

foreach (Song s in InitializeLibrary()) 
    { 
     Library.AddSong(s); 
     pBar.Value++; 
     pBar.Update(); 
    } 

InitializeLibrary()는 단지 목록을 반환하는 함수입니다

문제는 값이 계속 증가하는 동안 진행률 표시 줄이 중지, 특정 지점 (예 : 20 %) 후 "이동"는 것이다. 100 % 시간을 업데이트 할 수있는 방법이 있습니까?

+0

(윈도우 폼, WPF)? – oltman

+0

Visual C# 2008의 기본 Progressbar입니다. – Mike

+0

using System.Windows.Forms; – Mike

답변

9

내가 한 일은 BackgroundWorker component을 사용하는 것입니다.

배경 스레드에 노래를로드하고 진행률 표시 줄을 업데이트 할 UI 스레드로 진행률을보고하려면이 단추를 사용하십시오.

백그라운드 작업자는 진행률보고를 위해 스레드 간의 모든 메시징을 처리합니다.

이렇게하면 스레딩을 직접 관리하지 않고도 멀티 스레드의 이점을 누릴 수 있습니다.

진행률보고 사용 방법을 보여주는 좋은 자습서는 here입니다.

+0

+1, 좋은 생각이긴하지만 Progressbar를 수정하는 것 이상의 의미가 있습니다. –

+2

UI 스레드에서 많은 "작업"을 할 때 화면이 자주 다시 그리지 않고 "매달린"느낌을 갖습니다. 작업을 다른 스레드로 분리하면 화면의 페인팅에 아무런 문제가 없습니다. – jasonmw

1
당신은이 비율을 계산할 수 있도록 진행 표시 줄의 Maximum 속성을 설정해야

당신은 증가 할 때 Value : 당신이 UI에 사용하는 어떤

var items = InitializeLibrary(); 
pBar.Maximum = items.Length; 
foreach (Song s in items) 
{ 
    Library.AddSong(s); 
    pBar.Value++; 
} 
+0

최대 값이 이미 설정되어 있습니다. 표시하지 않았습니다. 죄송합니다 – Mike