KinectWithVRServer.MainWindow.launchAndKillKinects C# (CSharp) Method

launchAndKillKinects() private method

private launchAndKillKinects ( ) : void
return void
        private void launchAndKillKinects()
        {
            for (int i = 0; i < availableKinects.Count; i++)
            {
                if (availableKinects[i].UseKinect)
                {
                    //If the Kinect is to be used, check and see if it exists, and launch it if it doesn't
                    bool kinectFound = false;
                    for (int j = 0; j < server.kinects.Count; j++)
                    {
                        if (server.kinects[j].uniqueKinectID == availableKinects[i].UniqueID)
                        {
                            server.kinects[j].kinectID = (int)availableKinects[i].KinectID;
                            kinectFound = true;
                            break;
                        }
                    }
                    if (!kinectFound)
                    {
                        availableKinects[i].ServerStatus = "Starting";
                        kinectsAvailableDataGrid.Items.Refresh();
                        kinectsAvailableDataGrid.InvalidateVisual();
                        System.Threading.Thread.Sleep(10); //Yes, it is a dirty hack, but it is the only way I can find to get the GUI to update reliably
                        ForceGUIUpdate();
                        if (availableKinects[i].kinectType == KinectVersion.KinectV1)
                        {
                            server.kinects.Add(new KinectV1Wrapper.Core(ref server.serverMasterOptions, true, availableKinects[i].KinectID));
                        }
                        else if (availableKinects[i].kinectType == KinectVersion.KinectV2)
                        {
                            server.kinects.Add(new KinectV2Wrapper.Core(ref server.serverMasterOptions, true, (int)availableKinects[i].KinectID));
                        }
                        else if (availableKinects[i].kinectType == KinectVersion.NetworkKinect)
                        {
                            //TODO: Launch the networked kinect server here (unless I have a VRPN limitation I need to work around)
                            server.kinects.Add(new NetworkKinectWrapper.Core(ref server.serverMasterOptions, true, (int)availableKinects[i].KinectID, availableKinects[i].UniqueID));
                        }
                        availableKinects[i].ServerStatus = "Running";
                    }
                }
                else
                {
                    //If the Kinect is not to be used, check and see if it exists, and destroy it if it does
                    for (int j = 0; j < server.kinects.Count; j++)
                    {
                        if (server.kinects[j].uniqueKinectID == availableKinects[i].UniqueID)
                        {
                            lock (server.kinects[j])
                            {
                                availableKinects[i].ServerStatus = "Stopping";
                                kinectsAvailableDataGrid.Items.Refresh();
                                kinectsAvailableDataGrid.UpdateLayout();
                                System.Threading.Thread.Sleep(10);
                                ForceGUIUpdate();
                                server.kinects[j].ShutdownSensor(); //TODO: This fails sometimes...  There seems to be a race condition and the obect is getting removed between the if statement and the shutdown call
                                server.kinects.RemoveAt(j);
                                availableKinects[i].ServerStatus = "Stopped";
                                break;
                            }
                        }
                    }
                }
            }
            server.kinects.Sort(new KinectCoreComparer());
        }
MainWindow