private void SearchFiles()
        {
            state           = State.Searching;
            MainBtn.Content = "Stop";

            LogTextBox.Document.Blocks.Clear();
            LogTextBox.Document.Blocks.Add(new Paragraph(new Run("Scanning...")));

            filesToDelete.Clear();
            filesSize  = 0;
            filesCount = 0;

            FilesSizeLabel.Content  = HumanReadableByte.GetSize(0);
            FilesCountLabel.Content = "0 files";

            if (searchManager == null)
            {
                searchManager = new SearchFilesManager();

                searchManager.OnProgressChanged         += WorkerProgressChanged;
                this.searchManager.OnProgressDirChanged += this.WorkerDirProgressChanged;
                searchManager.OnFinished += SearchFilesComplete;
            }

            //// Start Seraching
            Thread thread = new Thread(searchManager.Work);

            thread.Start(context);
        }
        /// <summary>
        /// File deleted
        /// </summary>
        /// <param name="file"></param>
        /// <param name="size"></param>
        private void FileDeleted(string file, long size)
        {
            LogTextBox.Document.Blocks.Add(new Paragraph(new Run(file)));

            deletedFiles++;
            deletedFilesLenght += size;

            FilesSizeLabel.Content  = "Deleted: " + HumanReadableByte.GetSize(deletedFilesLenght);
            FilesCountLabel.Content = "Deleted: " + deletedFiles + " files";
        }
        private void WorkerDirProgressChanged(string dir)
        {
            long fileSize = DirSize(new DirectoryInfo(dir));

            LogTextBox.Document.Blocks.Add(new Paragraph(new Run(dir + " - " + HumanReadableByte.GetSize(fileSize))));

            filesSize += fileSize;
            filesCount++;

            FilesSizeLabel.Content  = HumanReadableByte.GetSize(filesSize);
            FilesCountLabel.Content = Convert.ToString(filesCount) + " dirs";
        }
        /// <summary>
        /// Progress
        /// </summary>
        /// <param name="file"></param>
        private void WorkerProgressChanged(string file)
        {
            filesToDelete.Add(file);

            long fileSize = new FileInfo(file).Length;

            LogTextBox.Document.Blocks.Add(new Paragraph(new Run(file + " - " + HumanReadableByte.GetSize(fileSize))));

            filesSize += fileSize;
            filesCount++;

            FilesSizeLabel.Content  = HumanReadableByte.GetSize(filesSize);
            FilesCountLabel.Content = Convert.ToString(filesCount) + " files";
        }
        private void CleanFinished(bool successful)
        {
            if (successful)
            {
                state           = State.Finished;
                MainBtn.Content = "Successful";
            }
            else
            {
                state           = State.Aborted;
                MainBtn.Content = "Search Again";
            }

            FilesSizeLabel.Content  = "Deleted: " + HumanReadableByte.GetSize(deletedFilesLenght);
            FilesCountLabel.Content = "Deleted: " + deletedFiles + " files";
        }