2011-11-19 3 views
1

두 번째 스레드에서 csv 파일을 읽는 winform이 콘솔에 파일 데이터를 씁니다. 기본 양식에 진행률 표시 줄이 있습니다. 두 번째 스레드에서 읽은 데이터 행을 기반으로 기본 폼의 진행률 표시 줄을 업데이트하고 싶습니다. 내 두 번째 스레드 기능을 사용합니다 :C# 진행률 막대를 업데이트하기위한 크로스 스레드 호출

pBar.BeginInvoke((MethodInvoker)delegate 
{ 
    this.pBar.Value = (int) (((double) nRows)/((double) fileLines)); 
}); 

말할 필요도없이 작동하지 않는 것 같습니다. 모든 조언을 크게 주시면 감사하겠습니다.

제쳐두고, pBar.Show() 및 pBar.Hide()를 사용해야합니까, 아니면 두 번째 스레드에서 pBar.Visible을 설정하여 진행률 표시 줄을 표시하거나 숨길 수 있습니까?

감사합니다.

+0

Erm, 파일의 줄 수는 어떻게 알 수 있습니까? 그것은 보통 닭고기와 달걀 문제입니다. –

+0

다음을 사용합니다. int fileLines = System.IO.File.ReadAllLines (fd.FileName) .Length; – Zeos6

+0

그래서 파일을 다시 읽으려면 파일의 전체 내용을 읽은 다음 버리십시오. –

답변

1

당신은 아마 %로 변환 (100)에 의해 곱셈 누락 :

this.pBar.Value = 100*nRows/fileLines; 

nRows0 다음 코드는 항상 0 또는 1에 진행률 표시 줄의 값을 설정합니다 fileLines 사이의 값을 취 가정.


나는 /이 진행 표시 줄을 숨기 보여 두 번째 스레드에서 pBar.Show()pBar.Hide() 또는 설정 pBar.Visible를 사용해야합니까?

두 번째 스레드에서 무엇을 하든지간에 GUI 컨트롤의 메서드를 호출하면 안됩니다. BeginInvoke 또는 Invoke을 사용하여 GUI 스레드로 마샬링하십시오.

+0

나는 100 배율을 잡아서 고정 시켰는데 아무런 차이가 없다. 두 번째 요점에 관해서, 나는 당신이 말하는 것을 이해하는지 확신하지 못한다. – Zeos6

+0

글쎄, 나는 그 이상으로 잘못된 것을 볼 수 없다. 당신은 당신의 프로그램이 아직 어떻게 실패했는지 말하지 않았습니다. 어때? –

+0

또한 내장 된 진행률 표시 줄로 시도해 볼 수 있습니까? 아마도 귀하의 사용자 지정 페인트 하나는 고장입니다. –

관련 문제