Jelajahi Sumber

update, but still stuck mainForm,WTF!

shenjian Office PC 7 tahun lalu
induk
melakukan
d94c324604
3 mengubah file dengan 81 tambahan dan 9 penghapusan
  1. 51 2
      Entity/SearchItem.cs
  2. 30 7
      PicSo/Form1.cs
  3. TEMPAT SAMPAH
      PicSo/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache

+ 51 - 2
Entity/SearchItem.cs

@@ -103,6 +103,17 @@ namespace AVSORTER
 
         private void _startGetMovie()
         {
+            if (OnAboutToLoadImage == null)
+            {
+                throw new Exception("必须注册这个事件");
+            }
+            else
+            {
+                OnAboutToLoadImage(this, new EventArgs());
+            }
+
+
+
             try
             {
                 if (this.chooseIndex != -1)
@@ -149,6 +160,17 @@ namespace AVSORTER
             {
                 RaiseStatusChangeEvent(QStatus.获取信息中, QStatus.出错, "获取影片信息时出错!");
             }
+            finally
+            {
+                if (OnCompletedLoadImage == null)
+                {
+                    throw new Exception("必须注册这个事件");
+                }
+                else
+                {
+                    OnCompletedLoadImage(this, new EventArgs());
+                }
+            }
             
         }
 
@@ -197,6 +219,16 @@ namespace AVSORTER
 
         public void StartQuery()
         {
+            if (OnAboutToLoadInfo==null)
+            {
+                throw new Exception("必须注册这个事件");
+            }
+            else
+            {
+                OnAboutToLoadInfo(this, new EventArgs());
+            }
+
+
             if (this.Getor!=null)
             {
                 //this.MovieBasicList = Getor.Query(SeedString);
@@ -214,7 +246,6 @@ namespace AVSORTER
         {
             try
             {
-
                 this.MovieBasicList = (obj.AsyncState as Func<string, List<MovieBasic>>).EndInvoke(obj);
                 if (this.MovieBasicList.Count > 1)
                 {
@@ -242,7 +273,14 @@ namespace AVSORTER
             }
             finally
             {
-                RaiseStatusChangeEvent(QStatus.准备好移动文件, QStatus.准备好移动文件, "Release1");
+                if (OnCompletedLoadInfo == null)
+                {
+                    throw new Exception("必须注册这个事件");
+                }
+                else
+                {
+                    OnCompletedLoadInfo(this, new EventArgs());
+                }
             }
 
         }
@@ -261,6 +299,17 @@ namespace AVSORTER
         }
 
         public delegate void StatusChangeEvent(object sender, StatusChangeEventArgs e);
+
+        public event EventHandler OnAboutToLoadInfo;
+
+        public event EventHandler OnCompletedLoadInfo;
+
+        public event EventHandler OnAboutToLoadImage;
+
+        public event EventHandler OnCompletedLoadImage;
+
+
+
         /// <summary>
         /// 是否自动下载封面
         /// </summary>

+ 30 - 7
PicSo/Form1.cs

@@ -113,31 +113,54 @@ namespace PicSo
             }
         }
 
-        Semaphore sem = new Semaphore(2, 2);
+        Semaphore sem1_bmovie = new Semaphore(2, 2);
+        Semaphore sem2_movie = new Semaphore(2, 2);
 
         private void btn_GO_Click(object sender, EventArgs e)
         {
             foreach (ListViewItem item in listView1.Items)
             {
-                sem.WaitOne();//现在这个Semaphore是可以正常工作的。但是放在这里会阻塞主进程,弄2个semaphore,再弄2个事件。在SearchItem里专门控制
-                //下载信息的进程,以及下载图片的进程数量,是比较好的方法。
                 var fi = new AVSORTER.SearchItem(item.SubItems[1].Text, arzon.Clone() as AVSORTER.IGetable);
                 item.Tag = fi;
                 fi.OnStatusChange += fi_OnStatusChange;
                 fi.Tag = item;
                 fi.IsAutoSelect = cb_AutoSelect.Checked;
                 fi.IsDownloadCover = cb_isCoverDownload.Checked;
+                //等一个许可信号
+                fi.OnAboutToLoadInfo += Fi_OnAboutToLoadInfo;
+                //释放放一个许可
+                fi.OnCompletedLoadInfo += Fi_OnCompletedLoadInfo;
+
+                fi.OnAboutToLoadImage += Fi_OnAboutToLoadImage;
+
+                fi.OnCompletedLoadImage += Fi_OnCompletedLoadImage;
+
                 fi.StartQuery();
             }
         }
 
+        private void Fi_OnAboutToLoadImage(object sender, EventArgs e)
+        {
+            sem2_movie.WaitOne();
+        }
+
+        private void Fi_OnCompletedLoadImage(object sender, EventArgs e)
+        {
+            sem2_movie.Release();
+        }
+        private void Fi_OnCompletedLoadInfo(object sender, EventArgs e)
+        {
+            sem1_bmovie.Release();
+        }
+
+        private void Fi_OnAboutToLoadInfo(object sender, EventArgs e)
+        {
+            sem1_bmovie.WaitOne();
+        }
+
         void fi_OnStatusChange(object sender, AVSORTER.SearchItem.StatusChangeEventArgs e)
         {
             ((sender as AVSORTER.SearchItem).Tag as ListViewItem).SubItems[2].Text = e.After.ToString();
-            if (e.Message=="Release1")
-            {
-                sem.Release();
-            }
         }
 
         private void UIParamChange(object sender, EventArgs e)

TEMPAT SAMPAH
PicSo/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache