1
Parallel Programming을 처음으로 실험하고 있습니다. Telerik Scheduler 컨트롤에서 속도 필터링을 개선하기 위해이 프로그램을 사용하고 있습니다.Parallel.ForEach를 사용하여 UI (telerik scheduler)를 올바르게 업데이트하는 방법
다음에 어떻게됩니까Task.Factory.StartNew(() =>
{
SchedulerView view = this.radScheduler1.ActiveView;
//ConcurrentBag<Classes.Appointment> _bag;
if (InvokeRequired) Invoke((Action)(delegate
{
this.radScheduler1.Appointments.BeginUpdate();
_itemsview = appointments.AsEnumerable().Where(app => app.Start >= view.StartDate && app.End < view.EndDate.AddDays(1)).ToList();
//_bag = new ConcurrentBag<Classes.Appointment>(_itemsview);
Parallel.ForEach(_itemsview, item =>
{
if (_unidades.Contains(item.Room.ToString()))
{
item.Visivel = true;
}
else
{
item.Visivel = false;
}
});
this.radScheduler1.Appointments.EndUpdate();
this.radScheduler1.Select();
}));
});
, 내가 필터로 넘어가는 때때로 다른 약속을 볼 수 있다는 것입니다 :
이
은 전, 나는 방으로 약속을 필터링하는 데 사용하고있는 코드입니다. 필터링 된 약속 수는 항상 맞지만 항상 화면에 올바른 약속이 표시되는 것은 아닙니다. 무슨 일 이니?
덜 안정적이지만 아마도 이전보다 느리지는 않습니다. 메인 스레드에서 UI를 업데이트하고 있는데, "if (InvokeRequired) Invoke ((Action) (델리게이트)"안에 업데이트를하면 어떻게됩니까? –
@NoeRocha 지금 당장 백그라운드 스레드를 만들고 있습니다. , UI 스레드 (Invoke)에 즉시 마샬링 한 다음 UI 스레드에서 작업 한 다음 Parallel.ForEach를 사용하여 백그라운드 스레드에서 작업하지만 작업은 UI 스레드에서 발생해야하는 모든 작업입니다. –
@ NoeRocha 코드를 직접 작성하고 작업/호출/병렬 호출을 꺼낸 경우 전체 작업이 더 빨라지고 올바르게 작동합니다. –