루프에 Parallel.Foreach
루프에 문제가 있습니다. 오랫동안 부모 GUI 프로그램의 Progressbar Value를 증가시키는 방법을 호출하지 않아야합니다. KeinPapierVersand
은 간단한 List<int>
개체이고 EinzelnachweisDruckDatum
은 DateTime
입니다.Parallel.Foreach는 Invoke를 사용하여 유휴 상태로 시작합니다.
Parallel.ForEach(KeinPapierVersand, partner =>
{
generate_PCL_nachweis(partner, EinzelnachweisDruckDatum, true, false);
generate_BGF_Report(partner, EinzelnachweisDruckDatum, false);
//If the following line is uncommented, the loop starts to idle after about 200
// processed Items and will never reach the code after the loop.
myProgressbar_einzelnachweis_druck.Parent.BeginInvoke(new MethodInvoker(delegate
{
myProgressbar_einzelnachweis_druck.Value =
myProgressbar_einzelnachweis_druck.Value + 1;
}));
});
이들은 C#에서 병렬 처리가되는 첫 번째 단계입니다. 나는 여기에 어떤 문제가 있는지 아무 단서도 없다. 예외는 던져지지 않았다. (전에 Try/Catch에 넣었다.) 진행 표시 줄이 호출되지 않으면 루프가 항상 문제없이 끝납니다. 왜 논리가 작동하지 않습니까? 추론의 오류는 어디에 있습니까? 도와주세요.
EDIT : 여기서 문제는 교착 상태입니다. 아래에서 완벽하게 아론이 설명합니다. 처리하고자하는 전체 작업 부하를 배경 작업자로 지정합니다. 이것은 완벽하게 작동합니다.
귀하의 상세하고 매우 명확한 설명에 감사드립니다. 그래서 이것은 고전적인 데드 록 상황입니다. 나는 몇 가지 방법을 시도하고 그에 따라 내 대답을 업데이 트됩니다. – kurdy