私は初めて並列プログラミングを実験しています。これを使用して、Telerik スケジューラ コントロールの速度フィルタリングを改善しています。
これは、部屋ごとに予定をフィルタリングするために使用しているコードです。例:
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();
}));
});
次に何が起こるかというと、フィルタから除外された他の予定が表示されることがあります。フィルタされた予定の数が常に正しいことはわかっていますが、画面に正しい予定が常に表示されるとは限りません。何が起こっている ?