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 }