2012-09-14 2 views
2

데이터 처리가 가능한 응용 프로그램 (비디오의 경우 이미지 알고리즘)을 개발했습니다. 다른 ProcessingMethod 개를 개발했습니다.여러 ProgressBars의 다중 스레드 업데이트

때때로 여러 비디오가 병렬로 처리됩니다. 각 프로세스는 별도의 스레드에서 실행됩니다.

데이터 처리중인 각 스레드에 대해 하나씩, ProgressBar 개의 GUI가 있습니다.

ProgressBar을 업데이트하는 좋은 방법은 무엇입니까?

현재 내 GUI는 모든 처리 스레드와 각 스레드에 대해 하나의 ProgressBar을 생성하고 있습니다. 그런 다음 ProgressBar을 스레드에 전달하면 스레드는 ProcessingMethod으로 전달됩니다. ProcessingMethodProgressBar (Invoke() 사용)을 업데이트합니다.

나는 ProcessingMethod과 다릅니다. 이러한 각각의 방법 내에서 ProgressBar을 업데이트하기 위해 복사 - 붙여 넣기 코드가 있습니다. 프로그래밍에 익숙하지 않지만 복사 붙여 넣기가 좋지 않다는 것을 알고 있습니다.

더 나아질 수있는 좋은 방법은 무엇입니까?

+0

pls는 우리에게 코드를 제공합니다. 다시 말해 리팩토링하는 데 1 분 미만의 시간이 걸릴 것이라고 확신합니다. – nawfal

답변

3

UpdateProgressBar이라는 메서드를 만듭니다.이 메서드는 진행률 표시 줄과 그 값을 인수로 취하여 Invoke으로 업데이트를 래핑합니다. 복사 - 붙여 넣기를 다른 인수로 단일 함수를 호출하여 바꿉니다.

+1

그런데 프로그래밍을 처음 사용하는 사람들은 멀티 스레드 코드에서 벗어나려고 노력해야합니다. 나는 기본 기술에 대한 회사의 이해없이 경쟁 조건을 파악하려고 시도하는 영상을 할 수 없습니다. – zmbq

+0

대부분의 모든 경쟁 조건을 제거 할 진행률 표시 줄 (하나만 있음)을 업데이트하려면 UI 스레드에 있어야합니다. – Servy

+0

비디오 처리 경쟁 조건이 아닌 진행률 표시 줄 경쟁 조건을 제거합니다 ... – zmbq

0

BackGroundWorker 구성 요소를 확인하십시오. 이것은 진도 표시를위한 안전한 콜백을 사용하여 GUI에서 스레드를 실행하기위한 것입니다.