/// <summary>
 /// Constructor: Instantiates and Starts the thread 
 /// </summary>
 /// <param name="BasicProgramData"></param>
 private DataComms(Grucox.DataManager.UserSessionData BasicProgramData)
 {
     basicProgramData = BasicProgramData;
     ThreadStart ThreadStartPoint = new ThreadStart(TryPerformDataUpload);
     thread1 = new Thread(ThreadStartPoint);
     Start();
 }
        public void ThreadProc()
        {
            String format = @"mm\:ss";
            Grucox.DataManager dataManager = new Grucox.DataManager(CalibrationSettings.Default.DataManagerConnectionString);
            Grucox.DataManager.UserSessionData userSessionData = new Grucox.DataManager.UserSessionData();

            userSessionData.DeviceUID = dataManager.GetDeviceMacAddress();
            userSessionData.LiveUserID = userID;
            userSessionData.DeviceUserID = userSessionData.LiveUserID;
            userSessionData.DeviceTableName = "GrucoxUserData"; // Device Database Table Name (I think)
            userSessionData.DeviceIndexId = 0; // id of the Devices Database Table.
            userSessionData.CustomProgram = "";
            userSessionData.BasicProgram = "Basic Program 1";
            userSessionData.SessionDate = DateTime.Now.Subtract(TimeSpan.FromMinutes(10));
            userSessionData.SessionDuration = dataSample.SessionDuration.ToString(format);
            userSessionData.LeftMaxConcP = dataSample.SessionMaxEcceTorqueAbs;
            userSessionData.LeftMaxEcceP = dataSample.SessionMaxEcceTorqueBack;
            userSessionData.RightMaxConcP = dataSample.SessionMaxConcTorqueAbs;
            userSessionData.RightMaxEcceP = dataSample.SessionMaxConcTorqueBack;
            userSessionData.LeftAvgConcP = dataSample.SessionAvgEcceTorqueAbs;
            userSessionData.LeftAvgEcceP = dataSample.SessionAvgEcceTorqueAbs;
            userSessionData.RightAvgConcP = dataSample.SessionAvgConcTorqueAbs;
            userSessionData.RightAvgEcceP = dataSample.SessionAvgConcTorqueBack;
            userSessionData.LeftStrengthIndex = dataSample.SessionStrengthIndexBack;
            userSessionData.LeftEnduranceIndex = dataSample.SessionEnduranceIndexBack;
            userSessionData.RightStrengthIndex = dataSample.SessionStrengthIndexAbs;
            userSessionData.RightEnduranceIndex = dataSample.SessionEnduranceIndexAbs;
            userSessionData.DistConc = dataSample.DistanceConc;
            userSessionData.DistEcce = dataSample.DistanceEcce;
            userSessionData.EnergyBurned = dataSample.TotalEnergyBurned;

            string Result = dataManager.UploadSessionData(userSessionData);

            if (callback != null)
                callback(true);
        }