精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#線程相關問題總結:基本操作及UI控件交互

開發 后端
C#線程相關問題有很多,有多線程的,有單線程的。本文主要討論C#單線程操作以及與UI控件互交方面的一些注意事項。

C#線程在.NET中是一項十分值得探討的對象。C#是一門支持多線程的語言,因此線程的使用也是比較常見的。由于線程的知識在Win32編程的時候已經說得過多,所以在.Net中很少介紹這部分(可能.Net不覺得這部分是它所特有的)。

那么線程相關的問題大致有如下四類(這篇文章只討論單線程、單線程與UI線程這兩方面的問題)。

問題一,線程的基本操作,例如:暫停、繼續、停止等;

問題二,如何向線程傳遞參數或者從中得到其返回值;

問題三,如何使線程所占用的CPU不要老是***;

***一個,也是問題最多的,就是如何在子線程來控制UI中的控件,換句話說,就是在線程中控制窗體某些控件的顯示。

對于問題一,我不建議使用Thread類提供的Suspend、Resume以及Abort這三個方法,前兩個有問題,好像在VS05已經屏蔽這兩個方法;對于Abort來說,除了資源沒有得到及時釋放外,有時候會出現異常。如何做呢,通過設置開關變量來完成。

對于問題二,我不建議使用靜態成員來完成,僅僅為了線程而破壞類的封裝有些得不償失。那如何做呢,通過創建單獨的線程類來完成。

對于問題三來說,造成這個原因是由于線程中進行不間斷的循環操作,從而使CPU完全被子線程占有。那么處理此類問題,其實很簡單,在適當的位置調用Thread.Sleep(20)來釋放所占有CPU資源,不要小看這20毫秒的睡眠,它的作用可是巨大的,可以使其他線程得到CPU資源,從而使你的CPU使用效率降下來。

看完前面的三個問題的解釋,對于如何做似乎沒有給出一個明確的答案,為了更好地說明如何解決這三個問題,我用一個比較完整的例子展現給大家,代碼如下。

  1. //--------------------------- Sub-thread class ---------------------------------------  
  2. //------------------------------------------------------------------------------------  
  3. //---File:          clsSubThread  
  4. //---Description:   The sub-thread template class file  
  5. //---Author:        Knight  
  6. //---Date:          Aug.21, 2006  
  7. //------------------------------------------------------------------------------------  
  8. //---------------------------{Sub-thread class}---------------------------------------  
  9. namespace ThreadTemplate  
  10. {  
  11.     using System;  
  12.     using System.Threading;  
  13.     using System.IO;  
  14.     /// < summary>  
  15.     /// Summary description for clsSubThread.  
  16.     /// < /summary>  
  17.     public class clsSubThread:IDisposable  
  18.     {  
  19.         private Thread thdSubThread = null;  
  20.         private Mutex mUnique = new Mutex();  
  21.         private bool blnIsStopped;  
  22.         private bool blnSuspended;  
  23.         private bool blnStarted;  
  24.         private int nStartNum;  
  25.         public bool IsStopped  
  26.         {  
  27.             getreturn blnIsStopped; }  
  28.         }  
  29.         public bool IsSuspended  
  30.         {  
  31.             getreturn blnSuspended; }  
  32.         }  
  33.         public int ReturnValue  
  34.         {  
  35.             getreturn nStartNum;}  
  36.         }  
  37.      
  38.         public clsSubThread( int StartNum )  
  39.         {  
  40.             //  
  41.             // TODO: Add constructor logic here  
  42.             //  
  43.             blnIsStopped = true;  
  44.             blnSuspended = false;  
  45.             blnStarted = false;  
  46.              
  47.             nStartNum = StartNum;  
  48.         }  
  49.         /// < summary>  
  50.         /// Start sub-thread  
  51.         /// < /summary>  
  52.         public void Start()  
  53.         {  
  54.             if( !blnStarted )  
  55.             {  
  56.                 thdSubThread = new Thread( new ThreadStart( SubThread ) );  
  57.                 blnIsStopped = false;  
  58.                 blnStarted = true;  
  59.                 thdSubThread.Start();  
  60.             }  
  61.         }  
  62.         /// < summary>  
  63.         /// Thread entry function  
  64.         /// < /summary>  
  65.         private void SubThread()  
  66.         {  
  67.             do 
  68.             {  
  69.                 // Wait for resume-command if got suspend-command here   
  70.                 mUnique.WaitOne();  
  71.                 mUnique.ReleaseMutex();  
  72.                 nStartNum++;  
  73.              
  74.                 Thread.Sleep(1000); // Release CPU here  
  75.             }while( blnIsStopped == false );  
  76.         }  
  77.         /// < summary>  
  78.         /// Suspend sub-thread  
  79.         /// < /summary>  
  80.         public void Suspend()  
  81.         {  
  82.             if( blnStarted && !blnSuspended )  
  83.             {  
  84.                 blnSuspended = true;  
  85.                 mUnique.WaitOne();  
  86.             }  
  87.         }  
  88.      
  89.         /// < summary>  
  90.         /// Resume sub-thread  
  91.         /// < /summary>  
  92.         public void Resume()  
  93.         {  
  94.             if( blnStarted && blnSuspended )  
  95.             {  
  96.                 blnSuspended = false;  
  97.                 mUnique.ReleaseMutex();  
  98.             }  
  99.         }  
  100.         /// < summary>  
  101.         /// Stop sub-thread  
  102.         /// < /summary>  
  103.         public void Stop()  
  104.         {  
  105.             if( blnStarted )  
  106.             {  
  107.                 if( blnSuspended )  
  108.                     Resume();  
  109.                 blnStarted = false;  
  110.                 blnIsStopped = true;  
  111.                 thdSubThread.Join();  
  112.             }  
  113.         }  
  114.         #region IDisposable Members  
  115.         /// < summary>  
  116.         /// Class resources dispose here  
  117.         /// < /summary>  
  118.         public void Dispose()  
  119.         {  
  120.             // TODO:  Add clsSubThread.Dispose implementation  
  121.             Stop();//Stop thread first  
  122.             GC.SuppressFinalize( this );  
  123.         }  
  124.         #endregion  
  125.     }  
  126. }  
  127.  

那么對于調用呢,就非常簡單了,如下:

  1. // Create new sub-thread object with parameters  
  2. clsSubThread mySubThread = new clsSubThread( 5 );  
  3. mySubThread.Start();//Start thread  
  4.  
  5. Thread.Sleep( 2000 );  
  6. mySubThread.Suspend();//Suspend thread   
  7. Thread.Sleep( 2000 );  
  8. mySubThread.Resume();//Resume thread   
  9. Thread.Sleep( 2000 );  
  10. mySubThread.Stop();//Stop thread   
  11. //Get thread's return value  
  12. Debug.WriteLine( mySubThread.ReturnValue );  
  13. //Release sub-thread object  
  14. mySubThread.Dispose();  

在回過頭來看看前面所說的三個問題。

C#線程相關問題回顧:問題一

對于問題一來說,首先需要局部成員的支持,那么

  1. private Mutex mUnique = new Mutex();  
  2. private bool blnIsStopped;  
  3. private bool blnSuspended;  
  4. private bool blnStarted;  

光看成員名稱,估計大家都已經猜出其代表的意思。接下來需要修改線程入口函數,要是這些開關變量能發揮作用,那么看看SubThread這個函數。

  1. /// < summary>  
  2. /// Thread entry function  
  3. /// < /summary>  
  4. private void SubThread()  
  5. {  
  6.     do 
  7.     {  
  8.         // Wait for resume-command if got suspend-command here    
  9.         mUnique.WaitOne();  
  10.         mUnique.ReleaseMutex();  
  11.         nStartNum++;  
  12.       
  13.         Thread.Sleep(1000);  
  14.     }while( blnIsStopped == false );  
  15. }  

函數比較簡單,不到十句,可能對于“blnIsStopped == false”這個判斷來說,大家還比較好理解,這是一個普通的判斷,如果當前Stop開關打開了,就停止循環;否則一直循環。

大家比較迷惑的可能是如下這兩句:

  1. mUnique.WaitOne();  
  2. mUnique.ReleaseMutex();  

這兩句的目的是為了使線程在Suspend操作的時候能發揮效果,為了解釋這兩句,需要結合Suspend和Resume這兩個方法,它倆的代碼如下。

  1. /// < summary>  
  2. /// Suspend sub-thread  
  3. /// < /summary>  
  4. public void Suspend()  
  5. {  
  6.     if( blnStarted && !blnSuspended )  
  7.     {  
  8.         blnSuspended = true;  
  9.         mUnique.WaitOne();  
  10.     }  
  11. }  
  12.  
  13. /// < summary>  
  14. /// Resume sub-thread  
  15. /// < /summary>  
  16. public void Resume()  
  17. {  
  18.     if( blnStarted && blnSuspended )  
  19.     {  
  20.         blnSuspended = false;  
  21.         mUnique.ReleaseMutex();  
  22.     }  
  23. }  

為了更好地說明,還需要先簡單說說Mutex類型。對于此類型對象,當調用對象的WaitOne之后,如果此時沒有其他線程對它使用的時候,就立刻獲得信號量,繼續執行代碼;當再調用ReleaseMutex之前,如果再調用對象的WaitOne方法,就會一直等待,直到獲得信號量的調用ReleaseMutex來進行釋放。這就好比衛生間的使用,如果沒有人使用則可以直接使用,否則只有等待。

明白了這一點后,再來解釋這兩句所能出現的現象。

  1. mUnique.WaitOne();  
  2. mUnique.ReleaseMutex();  

當在線程函數中,執行到“mUnique.WaitOne();”這一句的時候,如果此時外界沒有發送Suspend消息,也就是信號量沒有被占用,那么這一句可以立刻返回。那么為什么要緊接著釋放呢,因為不能總占著信號量,立即釋放信號量是避免在發送Suspend命令的時候出現等待;如果此時外界已經發送了Suspend消息,也就是說信號量已經被占用,此時“mUnique.WaitOne();”不能立刻返回,需要等到信號量被釋放才能繼續進行,也就是需要調用Resume的時候,“mUnique.WaitOne();”才能獲得信號量進行繼續執行。這樣才能達到真正意義上的Suspend和Resume。

至于線程的Start和Stop來說,相對比較簡單,這里我就不多說了。

C#線程相關問題回顧:問題二、三

現在再來分析一下問題二,其實例子比較明顯,是通過構造函數和屬性來完成參數和返回值,這一點我也不多說了。如果線程參數比較多的話,可以考慮屬性來完成,類似于返回值。

問題三,我就更不用多說了。有人說了,如果子線程中的循環不能睡眠怎么辦,因為睡眠的話,有時會造成數據丟失,這方面的可以借鑒前面Suspend的做法,如果更復雜,則牽扯到多線程的同步問題,這部分我會稍后單獨寫一篇文章。

前三個問題解決了,該說說最常見的問題,如何在子線程中控制窗體控件。這也是寫線程方面程序經常遇到的。

首先說說,為什么不能直接在子線程中操縱UI呢。原因在于子線程和UI線程屬于不同的上下文,換句比較通俗的話說,就好比兩個人在不同的房間里一樣,那么要你直接操作另一個房間里的東西,恐怕不行罷,那么對于子線程來說也一樣,不能直接操作UI線程中的對象。

那么如何在子線程中操縱UI線程中的對象呢,.Net提供了Invoke和BeginInvoke這兩種方法。簡單地說,就是子線程發消息讓UI線程來完成相應的操作。

這兩個方法有什么區別,這在我以前的文章已經說過了,Invoke需要等到所調函數的返回,而BeginInvoke則不需要。

用這兩個方法需要注意的,有如下三點:

***個是由于Invoke和BeginInvoke屬于Control類型的成員方法,因此調用的時候,需要得到Control類型的對象才能觸發,也就是說你要觸發窗體做什么操作或者窗體上某個控件做什么操作,需要把窗體對象或者控件對象傳遞到線程中。

第二個,對于Invoke和BeginInvoke接受的參數屬于一個delegate類型,我在以前的文章中使用的是MethodInvoker,這是.Net自帶的一個delegate類型,而并不意味著在使用Invoke或者BeginInvoke的時候只能用它。參看我給的第二篇文章(《如何彈出一個模式窗口來顯示進度條》),會有很多不同的delegate定義。

***一個,使用Invoke和BeginInvoke有個需要注意的,就是當子線程在Form_Load開啟的時候,會遇到異常,這是因為觸發Invoke的對象還沒有完全初始化完畢。處理此類問題,在開啟線程之前顯式的調用“this.Show();”,來使窗體顯示在線程開啟之前。如果此時只是開啟線程來初始化顯示數據,那我建議你不要使用子線程,用Splash窗體的效果可能更好。這方面可以參看如下的例子。

http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c95c.aspx#q621q

線程的四個相關問題已經說完了,這篇文章只說了單線程,以及單線程與UI線程交互的問題。其中涉及到的方法不一定是唯一的,因為.Net還提供了其他類來扶助線程操作,這里就不一一羅列。

【編輯推薦】

  1. 學習C#多線程:lock的用法
  2. 總結C#多線程的點點滴滴
  3. 學習C#實現HTTP協議:多線程文件傳輸
  4. C#子線程操作的一個小問題
  5. C#線程的啟動
責任編輯:yangsai 來源: 愚翁專欄
相關推薦

2009-08-27 13:55:08

C#子線程

2010-03-16 19:29:26

Java多線程操作

2009-08-11 15:44:05

C#基本技巧

2009-09-01 17:15:42

C#多線程應用

2009-08-05 18:39:54

C#異常類

2009-08-07 13:30:20

C# Excel導入

2009-09-08 17:37:54

C# listbox控

2011-04-25 15:15:00

C#

2009-09-16 10:56:22

C#開發ActiveX

2010-07-23 09:03:53

.NET跨線程

2009-09-01 15:08:07

C#命名規范

2009-07-17 10:37:05

C#多線程

2024-05-16 12:51:15

WinForms線程UI

2009-08-25 15:23:16

C#子線程

2009-08-06 16:05:09

GridView控件

2009-08-18 14:36:36

C# 操作Excel

2009-08-07 14:00:06

C#路徑

2009-09-08 16:10:03

C# ListBox

2011-05-20 16:07:29

C#

2009-12-24 09:16:11

C#泛型
點贊
收藏

51CTO技術棧公眾號

色一区av在线| 在线中文字幕不卡| 黑人中文字幕一区二区三区| 亚洲国产成人无码av在线| 国产成人一区二区三区影院| 欧美人体做爰大胆视频| 日韩欧美猛交xxxxx无码| 日本美女一级视频| 男人的天堂亚洲一区| 欧美裸体男粗大视频在线观看| 性活交片大全免费看| 韩国美女久久| 亚洲精品老司机| 欧美日韩亚洲一区二区三区在线观看 | 久久伊人精品天天| 亚洲精品视频久久久| 国产精一区二区| 在线观看www91| 成年人午夜视频在线观看| 四虎久久免费| 成人av资源站| 成人欧美一区二区三区黑人| 日本韩国欧美中文字幕| 欧美区亚洲区| 日日骚av一区| 在线免费观看视频| 国内精品偷拍| 欧美一级理论片| 成人性做爰aaa片免费看不忠| 黑人精品视频| 最新久久zyz资源站| 欧美日韩亚洲一区二区三区四区| 亚洲黄色在线免费观看| 麻豆国产欧美一区二区三区| 91成品人片a无限观看| 久久久久成人精品无码| 国产精品99久久久久久动医院| 日韩精品一二三四区| 国产精品二区视频| 欧美日韩黄网站| 69精品人人人人| 最近中文字幕一区二区| 中老年在线免费视频| 亚洲综合在线免费观看| 黄色网址在线免费看| 天天在线视频色| 国产精品三级av| 日韩色妇久久av| 国产中文字幕在线看| www欧美成人18+| 久久精品magnetxturnbtih| 日日夜夜精品免费| 成人ar影院免费观看视频| 91手机在线观看| 99精品国产99久久久久久97| 精品一区二区三区在线观看国产 | 久久久久久久久久久久久久久99| 久久久精品动漫| 天堂在线视频观看| 91色porny在线视频| 久久国产精品-国产精品| 日本五码在线| 国产日韩亚洲欧美综合| 天堂资源在线亚洲视频| 91涩漫在线观看| 亚洲欧美自拍偷拍| 麻豆映画在线观看| 免费影视亚洲| 高跟丝袜一区二区三区| 99免费视频观看| 成人福利一区二区| 91精品国产综合久久蜜臀| 精品人妻一区二区三| av不卡一区二区| 亚洲欧美日韩天堂| www.99re6| 国一区二区在线观看| 69视频在线播放| 国产精品免费无遮挡无码永久视频| 奇米一区二区三区| 91超碰rencao97精品| 色婷婷激情五月| 久久久精品国产免大香伊| 亚洲欧洲精品一区| 性欧美video高清bbw| 欧美视频在线免费看| 国产视频1区2区3区| 136福利精品导航| 亚洲精品一区二区久| 蜜桃视频最新网址| 韩国亚洲精品| 国产97在线|亚洲| 99精品视频免费看| 久久久三级国产网站| 日本不卡一区二区三区四区| h片视频在线观看| 欧美中文字幕亚洲一区二区va在线 | 欧美成人午夜电影| www.自拍偷拍| 91不卡在线观看| 欧美一级视频在线观看| 国产精品一二三四五区| 99久久99久久久精品齐齐| 亚洲人成人77777线观看| 丁香花在线观看完整版电影| 欧洲一区二区三区在线| 免费在线观看日韩av| av伊人久久| 欧美老女人性视频| 久久久999久久久| 成人激情综合网站| 天天干天天操天天干天天操| 92国产精品| 日韩你懂的在线观看| 精品无码在线观看| 一区二区国产在线观看| 99爱精品视频| 欧美18一19xxx性| 日韩欧美中文在线| 麻豆tv在线观看| 日本高清免费电影一区| 91成人国产在线观看| www男人的天堂| 国产精品久久久久影院色老大| 亚洲熟妇无码另类久久久| 国产一区二区av在线| 一区二区三区日韩在线| 久草手机在线观看| 成人爽a毛片一区二区免费| 中文字幕在线亚洲精品| av有声小说一区二区三区| 欧美精品一区二区精品网| 欧美精品成人久久| 国内精品免费**视频| 亚洲精品一品区二品区三品区| 校园春色亚洲| 亚洲国产成人爱av在线播放| 久一视频在线观看| 国产高清不卡一区| 久久久国产精华液999999| 亚洲成人av观看| 日韩精品视频在线观看免费| 国产精彩视频在线| 丁香网亚洲国际| 国产内射老熟女aaaa| 国产欧美视频在线| 按摩亚洲人久久| 国产一区二区三区视频免费观看 | 日韩国产精品亚洲а∨天堂免| 九九热精品在线观看| 国产精品亚洲专一区二区三区| 伊人久久大香线蕉成人综合网| 成人激情视屏| 日韩网站免费观看高清| 91美女精品网站| 综合久久久久久久| 无套白嫩进入乌克兰美女| 永久91嫩草亚洲精品人人| 91热精品视频| 日本一级理论片在线大全| 精品奇米国产一区二区三区| 日韩福利片在线观看| www激情久久| 波多野结衣天堂| 欧美gayvideo| 96国产粉嫩美女| 成人性生交大片免费看网站| 亚洲精品美女在线观看播放| 综合网在线观看| 中文字幕不卡在线| 一起草最新网址| 亚洲看片免费| 欧美自拍资源在线| 亚洲一区有码| 欧美黑人一级爽快片淫片高清| 人妻无码中文字幕免费视频蜜桃| 激情久久av一区av二区av三区 | 亚洲色图欧美激情| 污污免费在线观看| 久久中文欧美| 欧美aaa在线观看| 欧美sss在线视频| 日韩暖暖在线视频| 黄色av电影在线观看| 亚洲精品一区在线观看| 五月婷婷激情视频| 亚洲少妇中出一区| 免费a级黄色片| 激情综合色综合久久综合| 成人性生活视频免费看| 精品国产精品| 超碰97人人在线| 蜜桃精品在线| 欧美精品成人在线| www.亚洲.com| 精品粉嫩超白一线天av| 最近中文字幕在线免费观看| 一级特黄大欧美久久久| 卡一卡二卡三在线观看| 国产成人精品网址| 别急慢慢来1978如如2| 欧美私人啪啪vps| 日韩精品伦理第一区| 波多野结衣在线一区二区| 国产精品 欧美在线| 国产第一页在线视频| 在线色欧美三级视频| 人妻偷人精品一区二区三区| 欧美老年两性高潮| 无码人妻av免费一区二区三区| 亚洲精品国产成人久久av盗摄| 无码国产69精品久久久久同性| 国产精品一区二区在线看| 精品www久久久久奶水| 亚洲国产精品第一区二区三区| 在线观看欧美亚洲| 精品国产乱码久久久| 好看的日韩精品视频在线| 国产乱码精品一区二区三区亚洲人| 日韩av三级在线观看| a级片在线免费观看| 久久亚洲精品毛片| 天堂资源在线中文| 国产一区二区三区在线看| 五月婷婷在线观看视频| 日韩欧美综合一区| 国产精品-色哟哟| 欧美色爱综合网| 国产污视频网站| 日韩欧美中文字幕在线播放| www.99re7.com| 一区二区三区在线播放| 久久国产精品国语对白| 国产精品视频在线看| 亚洲做受高潮无遮挡| 91香蕉视频在线| 欧美xxxxx精品| 成人动漫视频在线| 久久久男人的天堂| 东方aⅴ免费观看久久av| 亚洲午夜精品在线观看| 国产一区二区不卡老阿姨| 国产乱码一区二区三区四区| 免费成人性网站| 中文字幕av不卡在线| 日产欧产美韩系列久久99| 成人3d动漫一区二区三区| 天堂va蜜桃一区二区三区漫画版| 黄色a级片免费| 久久久人人人| 日本成人在线免费视频| 老司机精品久久| 国产视频一区二区三区在线播放| 久久久夜精品| 青青草精品视频在线观看| 免费xxxx性欧美18vr| 在线观看亚洲色图| 精品一区二区三区在线观看国产| 红桃视频 国产| 国产精品一二三区在线| 国产精品久久久久久亚洲色| 91片在线免费观看| 在线观看日本中文字幕| 国产精品久久久久久久蜜臀| 最新av电影网站| 亚洲女同ⅹxx女同tv| 久久免费视频精品| 偷拍日韩校园综合在线| 无码一区二区三区| 在线观看亚洲a| 国产人妖一区二区三区| 精品久久久久久久人人人人传媒 | 中文字幕av日韩| 免费av毛片在线看| 欧美精品videosex极品1| 一级毛片久久久| 国产免费一区二区三区香蕉精| 99精品女人在线观看免费视频| 97欧洲一区二区精品免费| 久久午夜影院| 色综合久久久久久久久五月| 欧美+日本+国产+在线a∨观看| 丁香花在线影院观看在线播放| 裸体一区二区| 国内自拍第二页| 99国产精品国产精品久久| 亚洲午夜精品久久久久久高潮| 亚洲视频小说图片| 中文字幕超碰在线| 777色狠狠一区二区三区| 人妻无码中文字幕| 北条麻妃99精品青青久久| 九九色在线视频| 国产91网红主播在线观看| 免费观看亚洲天堂| 欧美性大战久久久久| 欧美不卡视频| 国产视频在线视频| 成人av片在线观看| 亚洲综合久久av一区二区三区| 亚洲国产成人porn| 97免费观看视频| 日韩精品中文在线观看| 综合图区亚洲| 国产精品白嫩美女在线观看| 粉嫩久久久久久久极品| 亚洲在线视频一区二区| 国产精品免费看| 丰满少妇中文字幕| 中文无字幕一区二区三区| 久草国产精品视频| 日韩一区和二区| 午夜在线视频| 国产aⅴ夜夜欢一区二区三区| eeuss国产一区二区三区四区| 亚洲精品tv久久久久久久久| 亚洲欧美日本国产专区一区| 人妻精品久久久久中文字幕69| 国产精品区一区二区三区| 国产91精品一区| 亚洲国产免费av| 性欧美猛交videos| 亚洲一区二区三| 欧美gay男男猛男无套| 九色91popny| 久久精品在这里| 日日夜夜综合网| 亚洲国产精品专区久久| 欧美色图天堂| 99r国产精品视频| 欧美成熟视频| 日韩a一级欧美一级| 国产精品久久久久久久久果冻传媒| 国产又大又粗又爽| 精品视频在线观看日韩| 国产资源在线观看入口av| www 成人av com| 午夜国产欧美理论在线播放| 一级黄色片在线免费观看| 国产精品第13页| 亚洲天堂999| 少妇高潮久久77777| 国产福利一区二区三区在线播放| 四虎永久在线精品免费一区二区| 久久婷婷久久| 人妻av无码一区二区三区| 91久久精品网| 2021av在线| 国产欧美一区二区| 一个色综合网| 人妻精品久久久久中文字幕69| 一二三四社区欧美黄| 蜜桃久久一区二区三区| 97久久久免费福利网址| 神马久久av| 国内外免费激情视频| 欧美国产国产综合| 在线观看视频二区| 欧美裸体xxxx极品少妇| 一区中文字幕电影| 亚洲 欧美 日韩 国产综合 在线| 26uuu精品一区二区| 中文字幕欧美人妻精品一区蜜臀| 最近2019好看的中文字幕免费| 欧美日韩免费电影| 国产一二三四五| 成人免费高清在线| 国产精品久久久久久人| 少妇高潮 亚洲精品| 中文在线综合| 欧美私人情侣网站| 亚洲欧美综合在线精品| 国产91绿帽单男绿奴| 日本成熟性欧美| 欧美xxxx中国| 97精品人人妻人人| 日本精品视频一区二区三区| 欧美高清视频| 国产欧美一区二区视频| 久久精品官网| 丁香花五月激情| 日韩久久免费电影| 国产精品一区二区美女视频免费看| 成人免费在线网| 国产欧美中文在线| 午夜精品久久久久久久91蜜桃| 欧美性视频网站| 香蕉久久网站| 9.1成人看片| 91 com成人网| xxxxxx欧美| 91精品一区二区三区四区| 久久综合久久久久88| 亚洲视频中文字幕在线观看| 97精品久久久| 久久亚洲国产| 一级性生活毛片| 日韩一卡二卡三卡| 亚洲综合在线电影| 欧日韩免费视频|