2012-02-16 5 views
0

폴더에 많은 파일 (400 영역에서)을 실행하는 프로그램 (winform)이 있으며 진행률을 표시하기 위해 진행률 표시 줄을 사용합니다. 정보가 차이를 만드는 경우 정보가 listview에 게시됩니다. 내가 겪고있는 문제는 PC가 느린 경우 네트워크를 통해 폴더 작업을하거나 파일 크기가 큰 경우 ProgressBar가 업데이트를 중지한다는 것입니다. 프로그램을 종료하면 계속 진행되고 진행률 표시 줄이 일부 단계에서 멈 춥니 다. 그리고 나서 그것이 완성되었음을 보여줍니다 (추가 참고 사항 : 나는 단지 진행률 막대가 아니라는 것을 발견했습니다.) 때때로 그것은 전체 형태입니다.하지만 다시, 프로그램이 끝나면 괜찮습니다. 양식, 그냥 상호 작용하지 말 것)ProgressBar 업데이트 (스레드 없음)

여기 까다로운 부분이 있습니다. 스레드를 사용하여 해결할 수 있다는 것을 알고 있습니다. 그러나 나는 그것을 사용하지 말라고 들었습니다. (우리가 왜 그 일에 들어 가지 못하게하자. 바보 일지라도 그것을 제외하고 말하십시오.) 나는 또한 양식을 새로 고치고 바 자체를 새로 고치려고했습니다. 그것의 아무도는 작동하는 것처럼 보이지 않는다. 그것을 사용하는 것은 좋은 생각은 아니지만 .DoEvent도 시도해도 작동하지 않습니다.

어떻게 진행률 막대를 업데이트 할 수 있습니까? 어떤 아이디어?

여기에 내가 진행률 표시 줄

//before the loop 
progress = iCount1; 
progressvalue = 0; 
double increment = 100/(double)progress; 
//this is at the end of the loop 
progressvalue = progressvalue + increment; 

에 사용하는 코드의 일부는 다음 코드의 비트가있다. 그 중 일부는 가치를 벗어나지 못하게합니다. 나머지는 진행률 막대와 전혀 관련이 없습니다

편집 : o, 그 1 변수가 있습니다. 기본적으로 3 개 이상의 루프를 실행합니다. 그래서 우리는 하나의 연속 막대를 가지고 있습니다. 3시 실행 막대가

편집 : 그것은 내 PC에 폴더에 대한 잘 작동하는 것. 하지만 그것이 느린 pc 또는 네트워크를 통해 실행될 때, 그것은이 때입니다.

EDIT : 백그라운드 워커 및 스레드에 대한 답변을 얻고 있습니다. 쓰래드없이 그것을 할 수있는 방법이 없습니까?

업데이트 : 마지막으로 내 상사가 배경 작업자와 협력하도록 설득했습니다. 그래서 그것에서 그것을하고있는 병. 하지만이 질문에 대해 .DoEvent 대답은 최고라고 생각합니다.

+0

이 코드는 아무것도하지만, 몇 가지 기본적인 계산을하지 않습니다. ProgressBar1.Value를 어디서 업데이트하려고하는지 알 수 없습니다. – Shai

+0

오, 죄송합니다, 제가 붙여 넣은 부분 바로 아래에 있습니다. 기본적으로이 : ProgressBar1.Value = System.Convert.ToInt32 (progressvalue); – MaNTiS

답변

0

Application.DoEvents()를 추가 할 수 있습니다. 예를 들어

:이 사건의 정상적인 흐름을 중단하고 예상치 못한 결과를 얻을 수 있기 때문에 그것은 일반적으로 권장되지 것을

while(!end) 
{ 

      //You processing logic here 
      Application.DoEvents(); 
} 

참고.

http://msdn.microsoft.com/en-us/library/system.windows.forms.application.doevents.aspx http://www.codinghorror.com/blog/2005/08/is-doevents-evil-revisited.html

1

양식 스레드가 사용 중일 때 매우 반응이없고 양식을 전혀 그릴 수 없습니다. 스레딩을 원하지 않는다고해도 다시 생각해보아야한다고 생각합니다.

나는이 예제와 같이 backgroundworker를 사용합니다 : here 아주 간단한 설정입니다.

+0

제가 원합니다. 하지만 내 상사는 안된다고.나는 여전히 그를 설득하려고 노력하고 있지만 그때까지는 다른 방법을 찾아야한다. 또한 작은 폴더에서 잘 작동합니다. 내 PC에있는 큰 폴더 (예 : 400과 같은) (심지어 그다지 훌륭하지만 atleast 괜찮은). 그 대부분은 내가 네트워크를 통해 일을하려고 할 때 – MaNTiS