2012-05-02 2 views
0

꽤 오래 실행되는 프로세스로 인해 현재 내 응용 프로그램이 잠시 정지됩니다.backgroundworker를 사용하여 장기 실행 프로세스가 여전히 작동 중임을 보여줍니다.

이 프로세스를 배경 작업자로 래핑하고 사용자에게 상태를 제공하려면 어떻게해야합니까?

이상적으로 프로세스 자체가 진행 상황을보고해야한다는 것을 알고 있지만 그 프로세스를 구현할 수 있다고 생각하지 않습니다. 프로세스에서 코드를 변경할 수는 없지만 너무 많이 변경하려고하지는 않습니다.

backgroundworker에서 프로세스를 시작하여 내 앱이 반응 형으로 유지 될 수 있다면 좋을 것입니다. 이제 내가 할 수있어. 그러나 문제는 프로세스가 여전히 실행 중임을 나타내는 무언가를 진행률 표시 줄에 표시하는 쉬운 방법이 있습니까?

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    StartLongRunningProcess(); 
} 

내 코드는 위와 같이 지금, 나는 내가 진행 막대를 업데이트 할 수있는 몇 가지 방법으로 과정을 포장하는 방법에 대해 궁금 해서요? 아니면 코드를 완전히 변경하지 않고이 프로세스에서 좀 더 많은 정보를 얻을 수있는 쉬운 방법이 있습니까? 이 긴 실행 프로세스에는 수정 된 행 카운터가 있지만 실행이 끝나면 값을 반환합니다.

BackgroundWorker 및 ReportProgress 옵션의 작동 방식을 알고 있지만 문제는 프로세스가 실행되고 실행 중 피드백을 제공하지 않는다는 것입니다.

+2

당신이 BackgroundWorker에 어떤이 진척 바의 갱신에 사용하는 데 소요의 ProgressChanged 이벤트로 봤어 전체 예를 찾을 수 있습니까? 별로 나쁘지 않습니다. – Servy

+0

1에서 100 사이의 숫자로 전화하십시오 (완료율) - 여기에 예제가 있습니다. http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx –

+1

Henk이 봅니다. 내 문제는, 나는 정말로 데이터를 가지고 있지 않다. 그것은 전체적인 질문이다. – Tys

답변

2

WorkerReportsProgress 속성을 true로 설정하면 ProgressChanged 이벤트를 사용할 수 있습니다.

BackgroundWorker bw = new BackgroundWorker{WorkerReportsProgress = true} 
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged); 

private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    var percent = e.ProgressPercentage; 
    //update progress bar here 
} 

그런 다음 진행 상황을보고 할 수 있습니다.

private void bw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    BackgroundWorker worker = sender as BackgroundWorker;  
    e.Result = StartLongRunningProcess(worker); 
} 

public void StartLongRunningProcess(BackgroundWorker worker) 
{ 
    worker.ReportProgress(percentComplete); 
} 

당신은 here

1

작업자를 시작하면 주 UI 스레드가 원하는대로 자유롭게 작업 할 수 있습니다. 이 시점에서 원하는 모든 애니메이션을 표시하거나 타이머를 통해 업데이트하거나 원하는 다른 메커니즘을 표시하기 만하면됩니다. 작업자가 완료되면 애니메이션을 중지/숨기기 만하십시오.

관련 문제