public override void Run()
 {
     //判断是否为屏蔽所有歌曲
     if (_requestedBlockupFullFolderPath.Equals(""))
     {
         //屏蔽所有歌曲
         string _songsFolderLocation = _osuInstalledLocation + "\\Songs";
         //开始屏蔽
         foreach (string feitem_requestedFolder in _folders)
         {
             blockupSong(_songsFolderLocation + "\\" + feitem_requestedFolder, _customBlockFiles, _blockVideo, _blockStoryboard, _backgroundBlockStyle, _blockCustomFiles);
             BlockedBeatmaps++;
         }
     }
     else
     {
         //屏蔽单个歌曲
         //等待制定毫秒时间
         Thread.Sleep(_delay);
         blockupSong(_requestedBlockupFullFolderPath, _customBlockFiles, _blockVideo, _blockStoryboard, _backgroundBlockStyle, _blockCustomFiles);
         Console.Beep();
     }
     //释放资源
     _folders                        = null;
     _customBlockFiles               = null;
     _osuInstalledLocation           = null;
     _requestedBlockupFullFolderPath = null;
     _delay                     = -1;
     _blockVideo                = false;
     _blockStoryboard           = false;
     this._backgroundBlockStyle = BackgroundBlockStyle.black;
 }
 /// <summary>
 /// 初始化ThreadBlockup(用于屏蔽单个歌曲)
 /// </summary>
 /// <param name="requestedBlockupFullFolderPath">要屏蔽的单个歌曲目录</param>
 /// <param name="blockCustomFiles">自定义屏蔽文件列表</param>
 /// <param name="delay">等待多少毫秒后屏蔽</param>
 /// <param name="blockVideo">是否屏蔽视频</param>
 /// <param name="blockStoryboard">是否屏蔽故事板</param>
 /// <param name="blackBackground">是否更换为黑色背景</param>
 public ThreadBlockup(string requestedBlockupFullFolderPath, List <string> customBlockFiles, int delay, bool blockVideo, bool blockStoryboard, BackgroundBlockStyle backgroundBlockStyle, bool blockCustomFiles)
 {
     this._customBlockFiles = customBlockFiles;
     this._requestedBlockupFullFolderPath = requestedBlockupFullFolderPath;
     this._delay                = delay;
     this._blockVideo           = blockVideo;
     this._blockStoryboard      = blockStoryboard;
     this._backgroundBlockStyle = backgroundBlockStyle;
     this._blockCustomFiles     = blockCustomFiles;
 }
 /// <summary>
 /// 初始化ThreadBlockup
 /// </summary>
 /// <param name="threadName">线程名称</param>
 /// <param name="osuInstalledLocation">osu!安装路径</param>
 /// <param name="folders">歌曲目录列表</param>
 /// <param name="blockCustomFiles">自定义屏蔽文件列表</param>
 /// <param name="blockVideo">是否屏蔽视频</param>
 /// <param name="blockStoryboard">是否屏蔽故事板</param>
 /// <param name="blackBackground">是否更换为黑色背景</param>
 /// <param name="blockPermanently"></param>
 public ThreadBlockup(string threadName, string osuInstalledLocation, List <string> folders, List <string> customBlockFiles, bool blockVideo, bool blockStoryboard, BackgroundBlockStyle backgroundBlockStyle, bool blockCustomFiles)
 {
     this.t.Name = threadName;
     this._osuInstalledLocation = osuInstalledLocation;
     this._folders              = folders;
     this._customBlockFiles     = customBlockFiles;
     this._blockVideo           = blockVideo;
     this._blockStoryboard      = blockStoryboard;
     this._backgroundBlockStyle = backgroundBlockStyle;
     this._blockCustomFiles     = blockCustomFiles;
     this.TotalBeatmaps         = _folders.Count;
 }
        /// <summary>
        /// 屏蔽一个beatmap
        /// </summary>
        /// <param name="requestedFolderFullPath">beatmap完整目录名</param>
        /// <param name="blockCustomFiles">自定义屏蔽文件列表</param>
        /// <param name="blockVideo">是否屏蔽视频</param>
        /// <param name="blockStoryboard">是否屏蔽故事板</param>
        /// <param name="blackBackground">是否更换为黑色背景</param>
        private void blockupSong(string requestedFolderFullPath, List <string> customBlockFiles, bool blockVideo, bool blockStoryboard, BackgroundBlockStyle backgroundBlockStyle, bool blockCustomFiles)
        {
            if (Directory.Exists(requestedFolderFullPath) == false)
            {
                return;
            }
            //假设一种情况,某歌曲已在Songs目录存在,用户打开个osz后osu!解压缩osz到同名的文件夹下,这样就有了源文件和屏蔽后文件同时存在的情况
            //解决方法:
            //如果原文件存在,大括号内再如果屏蔽后文件已存在,则删除原文件(sb、背景图之类的则写出一个透明图片),否则修改原文件名以屏蔽.
            //具体代码体现在下面的四个处理块
            List <FileInfo> _osuFilesInfo = OsuHelper.取目录下所有osu文件(requestedFolderFullPath);

            foreach (FileInfo feitem_osuFileInfo in _osuFilesInfo)
            {
                #region 处理视频
                if (blockVideo)
                {
                    string _videoFileName = requestedFolderFullPath + "\\" + OsuHelper.取osu文件内的视频文件名(feitem_osuFileInfo.FullName);
                    if (File.Exists(_videoFileName) == true)
                    {
                        //如果屏蔽后文件存在则删除原名文件
                        if (File.Exists(editFileNameBetweenBackupWord(_videoFileName, true)) == true)
                        {
                            File.Delete(_videoFileName);
                        }
                        else
                        {
                            File.Move(_videoFileName, editFileNameBetweenBackupWord(_videoFileName, true));
                        }
                    }
                }
                else
                {
                    string _videoFileNameBlocked = requestedFolderFullPath + "\\" + editFileNameBetweenBackupWord(OsuHelper.取osu文件内的视频文件名(feitem_osuFileInfo.FullName), true);
                    if (File.Exists(_videoFileNameBlocked) == true)
                    {
                        File.Delete(editFileNameBetweenBackupWord(_videoFileNameBlocked, false));
                        File.Move(_videoFileNameBlocked, editFileNameBetweenBackupWord(_videoFileNameBlocked, false));
                    }
                }
                #endregion
                #region 处理osu文件中的sb图片文件
                if (blockStoryboard)
                {
                    foreach (string feitem_sbFileName in OsuHelper.取osu文件内的SB文件名(feitem_osuFileInfo.FullName))
                    {
                        string _sbFileName = requestedFolderFullPath + "\\" + feitem_sbFileName;
                        //因下面的代码有处理背景图片一块,而有些sb内也写有背景文件信息,所以会有"不能移动到同名文件"的错误
                        //解决方法和处理背景图片方法一样
                        //再一个就是部分beatmap把背景图片也放在Storyboard中导致osu!提示背景图片被删除,解决方法和处理背景图片相同,先备份sb图片,然后写出一个相同文件名的透明图片.
                        if (File.Exists(_sbFileName) == true)
                        {
                            if (File.Exists(editFileNameBetweenBackupWord(_sbFileName, true)) == false)
                            {
                                File.Move(_sbFileName, editFileNameBetweenBackupWord(_sbFileName, true));
                            }
                            File.WriteAllBytes(_sbFileName, osuBeatmapsBlocker_dotNet2.Properties.Resources.onePxPic_transparent_png);
                        }
                    }
                }
                else
                {
                    foreach (string feitem_sbFileName in OsuHelper.取osu文件内的SB文件名(feitem_osuFileInfo.FullName))
                    {
                        string _sbFileName = requestedFolderFullPath + "\\" + feitem_sbFileName;
                        //如果屏蔽后文件存在则恢复
                        if (File.Exists(editFileNameBetweenBackupWord(_sbFileName, true)) == true)
                        {
                            File.Delete(_sbFileName);
                            File.Move(editFileNameBetweenBackupWord(_sbFileName, true), _sbFileName);
                        }
                    }
                }
                #endregion
                #region 处理背景图
                switch (backgroundBlockStyle)
                {
                case BackgroundBlockStyle.none:
                {
                    string _bgFileNameBlocked = requestedFolderFullPath + "\\" + editFileNameBetweenBackupWord(OsuHelper.取osu文件内的背景图文件名(feitem_osuFileInfo.FullName), true);
                    //如果屏蔽后的图存在则说明已经屏蔽,需要恢复
                    if (File.Exists(_bgFileNameBlocked) == true)
                    {
                        File.Delete(editFileNameBetweenBackupWord(_bgFileNameBlocked, false));
                        File.Move(_bgFileNameBlocked, editFileNameBetweenBackupWord(_bgFileNameBlocked, false));
                    }
                }
                break;

                case BackgroundBlockStyle.black:
                {
                    string _bgFileName = requestedFolderFullPath + "\\" + OsuHelper.取osu文件内的背景图文件名(feitem_osuFileInfo.FullName);
                    //如果原背景图存在
                    if (File.Exists(_bgFileName) == true)
                    {
                        //如果屏蔽后背景图文件不存在
                        if (File.Exists(editFileNameBetweenBackupWord(_bgFileName, true)) == false)
                        {
                            File.Move(_bgFileName, editFileNameBetweenBackupWord(_bgFileName, true));
                        }
                        File.WriteAllBytes(_bgFileName, osuBeatmapsBlocker_dotNet2.Properties.Resources.onePxPic_black_png);
                    }
                }
                break;

                case BackgroundBlockStyle.white:
                {
                    string _bgFileName = requestedFolderFullPath + "\\" + OsuHelper.取osu文件内的背景图文件名(feitem_osuFileInfo.FullName);
                    //如果原背景图存在
                    if (File.Exists(_bgFileName) == true)
                    {
                        //如果屏蔽后背景图文件不存在
                        if (File.Exists(editFileNameBetweenBackupWord(_bgFileName, true)) == false)
                        {
                            File.Move(_bgFileName, editFileNameBetweenBackupWord(_bgFileName, true));
                        }
                        File.WriteAllBytes(_bgFileName, osuBeatmapsBlocker_dotNet2.Properties.Resources.onePxPic_white_png);
                    }
                }
                break;

                default:
                    break;
                }
                #endregion
            }
            #region 处理osb文件
            if (blockStoryboard)
            {
                foreach (FileInfo feitem_osbFileInfo in OsuHelper.取目录下所有osb文件(requestedFolderFullPath, false))
                {
                    if (File.Exists(editFileNameBetweenBackupWord(feitem_osbFileInfo.FullName, true)) == true)
                    {
                        feitem_osbFileInfo.Delete();
                    }
                    else
                    {
                        feitem_osbFileInfo.MoveTo(editFileNameBetweenBackupWord(feitem_osbFileInfo.FullName, true));
                    }
                }
            }
            else
            {
                foreach (FileInfo feitem_osbFileInfo in OsuHelper.取目录下所有osb文件(requestedFolderFullPath, true))
                {
                    File.Delete(editFileNameBetweenBackupWord(feitem_osbFileInfo.FullName, false));
                    feitem_osbFileInfo.MoveTo(editFileNameBetweenBackupWord(feitem_osbFileInfo.FullName, false));
                }
            }
            #endregion
            #region 处理自定义文件
            foreach (string feitem_customBlockFile in OsuHelper.取目录下所有文件(requestedFolderFullPath, customBlockFiles, blockCustomFiles))
            {
                string _customBlockFileName = requestedFolderFullPath + "\\" + feitem_customBlockFile;
                if (blockCustomFiles)
                {
                    //如果原文件已存在
                    if (File.Exists(_customBlockFileName) == true)
                    {
                        //如果已被屏蔽
                        if (File.Exists(editFileNameBetweenBackupWord(_customBlockFileName, true)) == true)
                        {
                            File.Delete(_customBlockFileName);
                        }
                        else
                        {
                            File.Move(_customBlockFileName, editFileNameBetweenBackupWord(_customBlockFileName, true));
                        }
                    }
                }
                else
                {
                    //如果备份文件存在则恢复
                    if (File.Exists(_customBlockFileName) == true)
                    {
                        File.Delete(editFileNameBetweenBackupWord(_customBlockFileName, false));
                        File.Move(_customBlockFileName, editFileNameBetweenBackupWord(_customBlockFileName, false));
                    }
                }
            }
            #endregion
        }