Блокировка WebClient - многопоточное приложение - PullRequest
1 голос
/ 22 апреля 2011

У меня есть веб-клиент, который я использую в своем боте:

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 для загрузки, я получаю сообщение об ошибке, в котором говорится, что webClent может одновременно выполнять только одну операцию.Как я могу изменить этот класс так, чтобы когда один поток использовал его, другой должен был ждать.Мне нужно каким-то образом заблокировать его.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011
0 голосов
/ 22 апреля 2011

Например, вы можете использовать мьютекс.
Когда первый клиент делает запрос, вы получаете свойство мьютекса, освобождая его после завершения вызова.
Когда другие клиенты делают запрос, сначала вы ждете мьютекс, и работа завершена.

...