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++;
            });