передача параметров в BeginGetRequestStream - PullRequest
2 голосов
/ 30 марта 2011

Я использую пул потоков для вызова некоторых асинхронных веб-запросов для отправки данных

Я вызываю функцию RunWebAccess в цикле for

public void RunWebAccess (string strdara, int inttype)
{
     HttpWebRequest req = 
         (HttpWebRequest)WebRequest.Create("http://www.test.com");           
     byte[] requestBytes = System.Text.Encoding.ASCII.GetBytes(xmlvar);
     req.Method = "POST";
     req.ContentType = "text/xml";
     req.ContentLength = requestBytes.Length;         
     IAsyncResult result = 
         req.BeginGetRequestStream(new AsyncCallback(ProcessResults), req);
}

private void ProcessResults(IAsyncResult result)
{ 
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;
    Stream postStream = request.EndGetRequestStream(result);
    postStream.Write(result., 0, postData.Length ;
    postStream.Close();
}

ProcessResults функция не работает, потому что она не может получить доступ к параметрам.

Проблема в том, что я хочу передать параметры в функцию ProcessResults и записать в поток.

Согласно коду, я не могу использовать глобальныйпеременная или чтение ввода в функции ProcessResults.
(я хочу передать strdara, inttype в функцию ProcessResults)

1 Ответ

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

Вы можете использовать лямбда-нотацию для обратного вызова, что-то вроде этого:

public void RunWebAccess (string strdara, int inttype)
{
     HttpWebRequest req = 
         (HttpWebRequest)WebRequest.Create("http://www.test.com");           
     byte[] requestBytes = System.Text.Encoding.ASCII.GetBytes(xmlvar);
     req.Method = "POST";
     req.ContentType = "text/xml";
     req.ContentLength = requestBytes.Length;
     IAsyncResult result = null;
     result = 
         req.BeginGetRequestStream(ar =>
         {
            Stream postStream = request.EndGetRequestStream(result);
            postStream.Write(result., 0, postData.Length ;
            postStream.Close();
         }
         , req);
}
...