private void InitBackgroundWorker()
 {
     #region 文件系统线程
     fileSystemWorker = new BackgroundWorker()
     {
         WorkerReportsProgress = true, WorkerSupportsCancellation = true
     };
     fileSystemWorker.DoWork += (sender, e) =>
     {
         GetAllPictureInfoMatrix();
     };
     //fileSystemWorker.ProgressChanged += (sender, e) => { };
     fileSystemWorker.RunWorkerCompleted += (sender, e) =>
     {
         if (FileSystemWorkCompleted != null)
         {
             FileSystemWorkCompleted();
         }
     };
     #endregion
     #region 信息加载线程
     loadDetailWorker = new BackgroundWorker()
     {
         WorkerReportsProgress = true, WorkerSupportsCancellation = true
     };
     loadDetailWorker.DoWork += (sender, e) =>
     {
         while (DetaiQueue.Count != 0)
         {
             PictureInfo pi;
             lock (DetaiQueue)
             {
                 pi = DetaiQueue.Dequeue();
             }
             PictureInfo.EnsureThumb(pi);
             loadDetailWorker.ReportProgress(0, pi);
         }
     };
     loadDetailWorker.ProgressChanged += (sender, e) =>
     {
         if (LoadDetailsProgressChanged != null)
         {
             LoadDetailsProgressChanged((e.UserState as PictureInfo));
         }
     };
     loadDetailWorker.RunWorkerCompleted += (sender, e) =>
     {
         if (DetailWorkCompleted != null)
         {
             DetailWorkCompleted();
         }
     };
     //loadDetailWorker.RunWorkerCompleted += (sender, e) => { };
     #endregion
     #region 守护线程
     guardWorker = new BackgroundWorker()
     {
         WorkerReportsProgress = false, WorkerSupportsCancellation = true
     };
     guardWorker.DoWork += (sender, e) =>
     {
         #region ClearPicture
         if (!isCleaned)
         {
             for (int i = 0; i < allDirectoryList.Count; i++)
             {
                 try
                 {
                     string thumbpath = allDirectoryList[i] + "\\" + PictureInfo.ThumbDirectoryName;
                     ClearRedundancy(thumbpath, PictureInfo.ThumbSuffix);
                     string smallversionpath = allDirectoryList[i] + "\\" + PictureInfo.SmallVersionDirectoryName;
                     ClearRedundancy(smallversionpath, PictureInfo.SmallVersionSuffix);
                 }
                 catch { continue; }
             }
             isCleaned = true;
         }
         #endregion
     };
     #endregion
     #region 全屏图片加载线程
     viewWorker         = new BackgroundWorker();
     viewWorker.DoWork += (sender, e) =>
     {
         while (ViewWorkQueue.Count != 0)
         {
             PictureInfo pi;
             lock (ViewWorkQueue)
             {
                 pi = ViewWorkQueue.Dequeue();
             }
             if (pi != null)
             {
                 if (File.Exists(pi.SmallVersionPath))
                 {
                     pi.Image = PictureInfo.CreatePicture(pi.SmallVersionPath);
                     if (pi.Image != null && pi.Image.CanFreeze)
                     {
                         pi.Image.Freeze();
                     }
                 }
                 else
                 {
                     PictureInfo.CreateSmallVersion(pi);
                     pi.Image = PictureInfo.CreatePicture(pi.SmallVersionPath);
                     if (pi.Image != null && pi.Image.CanFreeze)
                     {
                         pi.Image.Freeze();
                     }
                 }
             }
         }
     };
     viewWorker.RunWorkerCompleted += (sender, e) =>
     {
         if (ViewWorkCompleted != null)
         {
             ViewWorkCompleted();
         }
     };
     #endregion
 }
 private void InitBackgroundWorker()
 {
     #region 文件系统线程初始化
     fileSystemWorker = new BackgroundWorker()
     {
         WorkerReportsProgress = true, WorkerSupportsCancellation = true
     };
     fileSystemWorker.DoWork += (sender, e) =>
     {
         GetAllVideoInfoMatrix();
     };
     fileSystemWorker.RunWorkerCompleted += (sender, e) =>
     {
         if (FileSystemWorkCompleted != null)
         {
             FileSystemWorkCompleted();
         }
     };
     #endregion
     #region 信息加载线程初始化
     loadDetailWorker = new BackgroundWorker()
     {
         WorkerReportsProgress = true, WorkerSupportsCancellation = true
     };
     loadDetailWorker.DoWork += (sender, e) =>
     {
         //Shell32.Shell shell = new Shell32.Shell();//若需获取其他信息 取消相关注释
         while (DetaiQueue.Count != 0)
         {
             VideoInfo currentWorkingObj;
             lock (DetaiQueue)
             {
                 currentWorkingObj = DetaiQueue.Dequeue();
             }
             #region 制作并加载缩略图
             VideoInfo.EnsureThumb(currentWorkingObj);
             #endregion
             #region 获取详细信息 如帧宽高 比特率等
             //Shell32.Folder dir = shell.NameSpace(System.IO.Path.GetDirectoryName(pi.AbsolutePath));
             //Shell32.FolderItem item = dir.ParseName(System.IO.Path.GetFileName(pi.AbsolutePath));
             //pi.FrameWidth = dir.GetDetailsOf(item, 282);
             //pi.FrameHeight = dir.GetDetailsOf(item, 280);
             #endregion
             loadDetailWorker.ReportProgress(0, currentWorkingObj);//报告进度currentWorkingObj已经加载完毕
         }
     };
     loadDetailWorker.ProgressChanged += (sender, e) =>
     {
         if (LoadDetailsProgressChanged != null)
         {
             LoadDetailsProgressChanged((e.UserState as VideoInfo));
         }
     };
     loadDetailWorker.RunWorkerCompleted += (sender, e) =>
     {
         if (DetailWorkCompleted != null)
         {
             DetailWorkCompleted();
         }
     };
     #endregion
     #region 守护线程初始化
     guardWorker = new BackgroundWorker()
     {
         WorkerReportsProgress = false, WorkerSupportsCancellation = true
     };
     guardWorker.DoWork += (sender, e) =>
     {
         System.Threading.Thread.Sleep(2000);
         #region ClearPicture
         if (!isCleaned)
         {
             for (int i = 0; i < allDirectoryList.Count; i++)
             {
                 try
                 {
                     string thumbpath = allDirectoryList[i] + "\\" + VideoInfo.ThumbDirectoryName;
                     ClearRedundancy(thumbpath, VideoInfo.ThumbSuffix);
                 }
                 catch { continue; }
             }
             isCleaned = true;
         }
         #endregion
     };
     #endregion
 }