2010-08-20 3 views
1

여기 내 문제가있다. 나는 C#에서 제품 업로드 모듈 (메인 폼)을 만들고있다. 엑셀 파일의 데이터를 읽은 다음 데이터베이스에 업로드 한 다음 이미지 크기를 조정하고 FTP를 통해 업로드합니다. 모든 것이 잘 작동합니다. 이제 진행률 막대를 추가하고 싶습니다. 새로운 양식을 만들었습니다. 두 개의 진행률 표시 줄을 추가하고 진행률 막대에 새로운 가치를 부여하는 공개 방법을 만들고 세 번째 방법은 완료되면 텍스트를 출력합니다. 기본 폼에 인스턴스를 추가하면 작동하지만 하드 조작 (이미지 크기 조정, ftp로 업로드)을하고 있고 CPU가 진행 상황을 바꿀 때까지 빨리 추적 할 수 없습니다. 그래서 해결책은 새로운 스레드에서 진행 양식을 시작하는 것입니다. 나는 그것을하기 위해 여러 가지 방법을 시도했지만 성공하지는 못했습니다. 주요 문제는 주 양식에서 진행 양식의 공용 메소드를 트리거해야한다는 것입니다.C# 다른 스레드에서 폼을 실행하고 처리하는 방법은 무엇입니까?

전 C에서 progressbars를 사용 해본 적이 없지만, 가장 쉽고 간단한 방법은 무엇입니까?

답변

1

아마도 개별 스레드에서 집중적 인 작업을 수행 한 다음 진행 상황을 사용자에게 표시하기 위해 이벤트를 진행 상태로 다시 정렬하는 것이 가장 좋습니다.

별도의 스레드가있는 경우 해당 스레드에서 GUI를 업데이트 할 수 없습니다. Invoke MSDN을 사용하여 살펴보아야합니다.

이 예제는 작업자 스레드를 사용하여보다 집중적 인 작업을 수행하는 방법에 대한 간단한 예제를 보여줍니다.

private void Button_Click(object sender, EventArgs e) 
    { 
    myThread = new Thread(new ThreadStart(ThreadFunction)); 
    myThread.Start(); 
    } 
    private void ThreadFunction() 
    { 
    MyThreadClass myThreadClassObject = new MyThreadClass(this); 
    myThreadClassObject.Run(); 
    } 
+0

감사합니다. 집중적 인 작업을 새로운 스레드에 넣었습니다. 진행률 표시 줄이 메인에서 시작되므로 완벽하게 작동합니다. – Ervin

관련 문제