锁定WebClient - 多线程应用程序

时间:2011-04-22 13:39:50

标签: c# .net multithreading locking webclient

我在我的机器人中使用了webClient:

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;
        }
    }

}

我有一个webclient对象。 有很多方法可以使用它。如果两个线程想要使用该webClient下载我得到错误,说webClent当时只能运行一个操作。 如何修改该类,以便当一个线程使用它时另一个线程必须等待。 我需要以某种方式锁定它。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

例如,您可以使用互斥锁 当第一个客户端发出请求时,您将获得互斥锁的属性,并在呼叫完成时释放它 当其他客户端发出请求时,首先等待互斥锁并完成作业。