Parallel.ForEach(lstWorkStation, currItem =>
{
DP dp = new DP();
dp.Number = oCollectDP.Count.ToString();
dp.MachineName = currItem;
dp.UserName = getUserNameWMI(currItem);
dp.IPAddress = getUserIP(currItem);
Dispatcher.Invoke(new Action(() =>
{
oCollectDP.Add(dp);
(sender as BackgroundWorker).ReportProgress(i);
}));
i++;
});