private void uxBGProcess_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                Dictionary<String, object> objArgument =(Dictionary<String, object>)e.Argument;
                List<String> arguements = (List<String>)objArgument["DefragArguements"];

                StringBuilder output = new StringBuilder();
                output.AppendLine();
                foreach (String argument in arguements)
                {
                    string driveName = argument.Substring(0, 1).ToUpper();
                    output.AppendLine("Drive Name :" + driveName.ToUpper());
                    output.AppendLine("-----------------------------------");
                    commandObj = new CommandObj();
                    commandObj.ProcessName = DefragmentationConstants.PROCESS_NAME;
                    String result = commandObj.Run(DefragmentationConstants.DEFRAGMENTATION, argument, DefragmentationConstants.DEFRAGMENTATION + ".out", "");
                    output.AppendLine(result);
                    output.AppendLine(); output.AppendLine();
                    defragModel.AlignedReport += output.ToString();
                    
                    if (commandObj.IsCancelled) return;
                    //LogMessage.WriteLogInfo("DefragmentationService.cs : uxBGProcess_DoWork() : Analyze/Defragmentation process was completed for " + argument.Substring(0, 1).ToUpper() + "' Drive");
                }

                e.Result = output.ToString();
                //LogMessage.WriteLogInfo("DefragmentationService.cs : uxBGProcess_DoWork() : Analyze/Defragmentation process was completed for all selected drives.");
            }
            catch (Exception)
            {
                e.Cancel = true;
                //LogMessage.WriteErrorInfo("DefragmentationService.cs : uxBGProcess_DoWork() :: " + ex.Message);
            }
        }
        private void uxBGProcess_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            
            try
            {

                AnalysisReport = string.Empty;
                //LogMessage.WriteLogInfo("DefragmentationService.cs : uxBGProcess_RunWorkerCompleted() method invoked.");
                defragModel.SelectedDrives.Clear();
                if (commandObj.IsCancelled)
                {
                    StopDefragmentation(defragModel);
                }
                else if (e.Cancelled)
                {
                    String message = String.Empty;
                    message = defragModel.Analyse ? DefragmentationConstants.ERROR_ANALYSE : DefragmentationConstants.ERROR_DEFRAGMENT;
                    //LogMessage.WriteLogInfo("DefragmentationService.cs : uxBGProcess_RunWorkerCompleted() : " + message);
                    defragModel.Report = message;
                }
                else if (e.Result != null)
                {
                    String driveName = String.Empty;
                    for (int index = 0; index < defragModel.SelectedDrives.Count; index++)
                    {
                        driveName += defragModel.SelectedDrives[index].ToString().Replace("\\", "").ToUpper().Replace(":", "") + "-";
                    }

                    String reportType = defragModel.Analyse ? "Analysis" : "Defrag";

                    if (e.Result.ToString().Contains("The disk defragmenter cannot start because you have insufficient priveleges to perform this operation"))
                    {
                        defragModel.Report = Settings.Default.defragerrortemplate.Replace("{$error$}", "The disk defragmenter cannot start because you have insufficient priveleges to perform this operation");
                    }
                    else
                    {
                        defragModel.Report = defragModel.Analyse ? BuildAnalysisReport(e.Result.ToString()) : BuildDefragReport(e.Result.ToString());
                    }
                }
                else
                {
                    if (commandObj.Result.Contains("The disk defragmenter cannot start because you have insufficient priveleges to perform this operation"))
                    {
                        defragModel.Report = "The disk defragmenter cannot start because you have insufficient priveleges to perform this operation";
                    }
                }
                AnalysisReport = defragModel.Report;
                commandObj = null;
                if (StopOperation != null)
                {
                    StopOperation(defragModel.Report);
                }
                MainWindow.chromiumBrowser.ExecuteScript("javascript:showDefragmentReportData()");

            }
            catch (Exception)
            {
                commandObj = null;
                if (StopOperation != null)
                {
                    StopOperation(defragModel.Report);
                }

                //LogMessage.WriteErrorInfo("DefragmentationService.cs : uxBGProcess_RunWorkerCompleted() :: " + ex.Message);
            }
        }
        private void uxBGProcess_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                string junkfilelistCount = string.Empty;
                //isScanningInprogress = false;
                //LogMessage.WriteLogInfo("DefragmentationService.cs : uxBGProcess_RunWorkerCompleted() method invoked.");
                if (commandObj.IsCancelled)
                {
                    //uxDPSStatusPictureBox.Enabled = false;
                    //uxDPSStatusPictureBox.Image = Properties.Resources.red;
                    junkfilelistCount = (junkFileSpecificationsList != null) ? junkFileSpecificationsList.Count.ToString() : "0";
                    chromiumBrowser.ExecuteScript("javascript:diskPerformanceShow('" + isJunkFile + "','" + isInternetOptimizer + "','" + isDiskperformancr + "','" + junkfilelistCount + "','False','" + commandObj.IsCancelled + "')");
                    //StopDefragmentation();

                    //uxStatusPanel.Visible = true;
                    //uxJunkFilesProblemStatus.Visible = true;
                    //if (string.IsNullOrEmpty(uxJunkFilesProblemStatus.Text) == false)
                    //{
                    //    uxFixAllButton.Visible = true;
                    //    uxShowDetailsButton.Visible = true;
                    //}
                    //uxJunkFilesProblemStatus.Text = string.IsNullOrEmpty(uxJunkFilesProblemStatus.Text) ? "Disk Analysis cancelled by user" : uxJunkFilesProblemStatus.Text + " " + " Disk Analysis cancelled by user";
                }
                else if (e.Cancelled)
                {
                    //String message = String.Empty;
                    //message = defragModel.Analyse ? DefragmentationConstants.ERROR_ANALYSE : DefragmentationConstants.ERROR_DEFRAGMENT;
                    //LogMessage.WriteLogInfo("DefragmentationService.cs : uxBGProcess_RunWorkerCompleted() : " + message);
                    //defragModel.Report = message;
                }
                else if (e.Result != null)
                {
                    if (commandObj.Result.Contains("The disk defragmenter cannot start because you have insufficient priveleges to perform this operation"))
                    {
                        //uxDPSStatusPictureBox.Enabled = false;
                        //uxDPSStatusPictureBox.Image = Properties.Resources.red;
                        //uxStatusPanel.Visible = true;
                        //uxJunkFilesProblemStatus.Visible = true;
                        //if (string.IsNullOrEmpty(uxJunkFilesProblemStatus.Text) == false)
                        //{
                        //    uxFixAllButton.Visible = true;
                        //    uxShowDetailsButton.Visible = true;
                        //}
                        //uxJunkFilesProblemStatus.Text = string.IsNullOrEmpty(uxJunkFilesProblemStatus.Text) ? "Insufficient priveleges to perform Disk Analysis" : uxJunkFilesProblemStatus.Text + " " + " Insufficient priveleges to perform Disk Analysis";
                        junkfilelistCount = (junkFileSpecificationsList != null) ? junkFileSpecificationsList.Count.ToString() : "0";
                        chromiumBrowser.ExecuteScript("javascript:diskPerformanceShow('" + isJunkFile + "','" + isInternetOptimizer + "','" + isDiskperformancr + "','" + junkfilelistCount + "','False','" + commandObj.IsCancelled + "')");
                    }
                    else
                    {

                        //uxDPSStatusPictureBox.Enabled = false;
                        //uxDPSStatusPictureBox.Image = Properties.Resources.green;
                        //uxDiskPerformanceScanLinkLabel.Visible = true;
                        formattedAnalysisReport = BuildAnalysisReport(e.Result.ToString());
                        junkfilelistCount = (junkFileSpecificationsList == null) ? "0" : junkFileSpecificationsList.Count.ToString();
                        chromiumBrowser.ExecuteScript("javascript:diskPerformanceShow('" + isJunkFile + "','" + isInternetOptimizer + "','" + isDiskperformancr + "','" + junkfilelistCount + "','True','" + commandObj.IsCancelled + "')");
                        //uxDiskPerformanceScanReportWebBrowser.DocumentText = formattedAnalysisReport;
                        //uxStatusPanel.Visible = true;
                        //uxJunkFilesProblemStatus.Visible = true;
                        //if (string.IsNullOrEmpty(uxJunkFilesProblemStatus.Text) == false)
                        //{
                        //    uxFixAllButton.Visible = true;
                        //    uxShowDetailsButton.Visible = true;
                        //}
                        //uxJunkFilesProblemStatus.Text = string.IsNullOrEmpty(uxJunkFilesProblemStatus.Text) ? "Disk performance analysis completed." : uxJunkFilesProblemStatus.Text + " " + " Disk performance analysis completed.";
                    }
                }
                else
                {
                    if (commandObj.Result.Contains("The disk defragmenter cannot start because you have insufficient priveleges to perform this operation"))
                    {
                        //uxDPSStatusPictureBox.Enabled = false;
                        //uxDPSStatusPictureBox.Image = Properties.Resources.red;
                        //uxStatusPanel.Visible = true;
                        //uxJunkFilesProblemStatus.Visible = true;
                        //uxJunkFilesProblemStatus.Text = string.IsNullOrEmpty(uxJunkFilesProblemStatus.Text) ? "Insufficient priveleges to perform Disk Analysis" : uxJunkFilesProblemStatus.Text + " " + " Insufficient priveleges to perform Disk Analysis";
                        chromiumBrowser.ExecuteScript("javascript:diskPerformanceShow('" + isJunkFile + "','" + isInternetOptimizer + "','" + isDiskperformancr + "','" + junkFileSpecificationsList.Count.ToString() + "','False','" + commandObj.IsCancelled + "')");
                    }
                }

                commandObj = null;

                //uxJunkFilesFoldersCheckBox.Enabled = true;
                //uxInternetOptimizerCheckBox.Enabled = true;
                //uxDiskPerformanceCheckBox.Enabled = true;
                //uxScanPanel.Visible = false;
                //uxScanningLabel.Text = "Scanning...";
                //uxJunkFileScanButton.Visible = true;
                //uxStopScanButton.Visible = false;
                //uxJunkFileScanButton.Enabled = true;
            }
            catch (Exception ex)
            {
                commandObj = null;
                ErrorTracker.WriteErrorLog("PCOptimizaton.cs", "uxBGProcess_RunWorkerCompleted", "", ex.Message, ex.StackTrace, "ERROR");
                //LogMessage.WriteErrorInfo("DefragmentationService.cs : uxBGProcess_RunWorkerCompleted() :: " + ex.Message);
            }
        }