나는 장시간 for-each 루프를 가지고 있으며 시각적 사용자 피드백을 추가하는 관용적 방법이 있는지 궁금해서 사용자가 응용 프로그램이 충돌했다고 생각하지 않습니다.장기 실행 작업에 대한 시각적 피드백
private void btnRunLongRunningTask_Click(object sender, EventArgs e)
{
foreach(string path in Directory.EnumerateFiles(@"path"), "*.ext", SearchOption.AllDirectories))
{
var result = LongRunning.Task(path);
string resultPath = Manipulate(path);
// write result to resultPath
}
}
이것은 도움이 될 수 있습니다. 작업 자체가 오래 걸리는 것은 아니지만 많은 작업이 소요될 수 있습니다.
어떻게 수행 할 수 있습니까? 내가 디렉토리를 논쟁의 대상으로 삼았 기 때문에 나는 작업이 수행 될 횟수를 조사한 다음 이에 따라 진행률 막대를 업데이트하고 작업자에게 작업 및 업데이트 코드를 실행하고 크로스 쓰레드 액세스를 관찰했다. 문제.
진행률 막대? 반복 할 때마다 진행률 막대를 단계별로 진행합니다. – Botonomous
배경 작업자를 사용하여보세요 - http://stackoverflow.com/questions/7546222/adding-a-progress-bar – MethodMan
이것은 잠재적으로 [TPL] (http://msdn.microsoft. com/en-us/library/dd460717.aspx), 특히 [Parallel.Foreach] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.foreach.aspx) (이렇게 LongRunning.Task가 thread 세이프 인만큼 긴), 이것은 상당히 고속 일 가능성이 있습니다. WinForms 이전에는 사용 해본 적이 없기 때문에 직접 호출 할 수 있는지 또는 Parallel.Foreach를 BackgroundWorker (또는 [TaskFactory.StartNew] (http://msdn.microsoft) .com/ko-us/library/dd321439.aspx), 더 간단합니다. – gregmac