2011-04-22 63 views
1

我有,我用我的機器人Web客戶端:鎖定Web客戶端 - 多線程應用程序

using System; 
using System.Net; 

namespace Game_Bot 
{ 
    class WebClientEx : WebClient 
    { 
     public CookieContainer CookieContainer { get; private set; } 

     public WebClientEx() 
     { 
      CookieContainer = new CookieContainer(); 
     } 

     public void ClearCookies() 
     { 
      CookieContainer = new CookieContainer(); 
     } 

     protected override WebRequest GetWebRequest(Uri address) 
     { 

      var request = base.GetWebRequest(address); 
      if (request is HttpWebRequest) 
      { 
       (request as HttpWebRequest).CookieContainer = CookieContainer; 
      } 
      return request; 
     } 
    } 

} 

我有我的Web客戶端的一個對象。 有很多方法使用它。如果兩個線程想要使用該webClient進行下載,我得到的錯誤表明webClent當時只能運行一個操作。 如何修改該類,以便當一個線程正在使用它時,另一個線程必須等待。 我需要以某種方式鎖定它。

+0

既然你不希望他們同時運行,爲什麼不使用隊列? http://www.dotnetperls.com/queue – Prix 2011-04-22 15:10:05

+0

@Prix所有線程都在做任務,等待,計數。有時候這些線程需要從頁面中刪除一些html。我非常罕見,但有時會發生2線程想要同時下載頁面的情況。我想鎖定,以便當時只有一個人可以使用該WebClient。 – Hooch 2011-04-22 16:12:24

回答

0

例如,您可以使用Mutex。
當第一個客戶端發出請求時,您將獲得互斥鎖的屬性,並在呼叫完成時釋放它。
當其他客戶端發出請求時,首先等待互斥鎖並完成任務。