2011-10-07 2 views
1

.NET에서 장기 실행 작업을 실행할 라이브러리/프레임 워크가 있습니까? 이런 식으로 뭔가를 찾고 : Execute()가 호출 될 때.NET/Windows Forms에서 장기 실행 액션을 실행하기위한 라이브러리?

private void button1_Click(...) 
{ 
    LongActionRunner.Execute((ref int total, ref int done) => { 
    // i know it's not thread-safe 
    total = 100; 
    for(var i = 0; i <= 100; ++i) { 
     done = i; 
     Thread.Sleep(100); // slow 
    } 
    }); 
} 

, 나는 진행률 표시 줄이있는 창을 표시해야합니다. 내 행동이 던지면 오류 메시지가 표시됩니다.

기존 솔루션이 있습니까?

답변

3

BackgroundWorker을 사용할 수 있습니다. 특히 당신이 제시 한 시나리오를위한 것입니다. BackgroundWorker를 사용하여 진행률 막대를 구현하는 방법에 대한 자습서는 here을 참조하십시오.

+0

진행률 표시 줄, 오류 처리 등은 어떻게됩니까? 혼자서 코드를 작성하고 싶지는 않습니다. – agibalov

+0

당신은 여전히 ​​진행 바를 추가 할 필요가 있습니다 ... 그러나 backgroundworker는 'progressChanged'를위한 이벤트를 가지고있어서 진행 바를 똑바로 만듭니다. – jle

+0

@ loki2302 - 솔루션에 관계없이 모두 자신을 코딩해야합니다. –

0

BackroundWorker는 스레드 풀 스레드를 사용하기 때문에 상대적으로 (최대 1 초) 작업에만 사용해야합니다. 작업 시간이 오래 걸리면 스레드를 만들어야합니다.

필자가 생각하기에 많은 상업 프로젝트에이 글을 썼지 만 오픈 소스 솔루션에 대해서는 잘 모른다. 사용자가 button1을 두 번 누르고 재진입을하지 못하도록하려면 진행률 표시 줄이있는 대화 상자를 표시해야한다는 데 동의합니다. 당신이 말했듯이, 당신은 또한 오류와 취소를 처리해야합니다.

+0

'최대 1 초'소유권 주장에 대한 인용문을 제공해 주시겠습니까? 나는 문제없이 수년간 상업 프로젝트에서 많은 시간을 들여야하는 BackgroundWorkers를 사용 해왔다. –

+0

@Dour : 이전 질문입니다 : http://stackoverflow.com/questions/230003/thread-vs-threadpool 장기 실행 작업을 위해 스레드 풀을 사용하면 스레드 관리 알고리즘이 혼란 스럽습니다 –