2014-02-06 2 views
1

스레드 요청 웹 요청을하고 있습니다. Start() 하위에서 GetResponseCallback()에 'index'매개 변수를 전달하려면 어떻게합니까?vb.net HttpWebRequest BeginGetResponse 매개 변수

두 개의 서브 우퍼 :

Shared Sub Start(ByVal index As Integer) 
    Dim request As HttpWebRequest = CType(WebRequest.Create("http://sternbud.com/login/checklogin.php"), HttpWebRequest) 

    request.ContentType = "application/x-www-form-urlencoded" 
    request.Method = "POST" 

    Debug.Print(index & ">" & AccountArray(dictThread.Keys(index))) 

    Dim result As IAsyncResult = CType(request.BeginGetRequestStream(AddressOf GetRequestStreamCallback, request), IAsyncResult) 

    allDone.WaitOne() 
End Sub 

Private Shared Sub GetRequestStreamCallback(ByVal asynchronousResult As IAsyncResult) 
    Dim request As HttpWebRequest = CType(asynchronousResult.AsyncState, HttpWebRequest) 

    Dim postStream As Stream = request.EndGetRequestStream(asynchronousResult) 
    Dim postData As [String] = "myusername=" & AccountArray(AccountIndex) & "&mypassword=test" 


    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData) 

    postStream.Write(byteArray, 0, postData.Length) 
    postStream.Close() 

    Dim result As IAsyncResult = CType(request.BeginGetResponse(AddressOf GetResponseCallback, request), IAsyncResult) 
End Sub 

답변

1

당신은 BeginGetRequestStream에 마지막 매개 변수에 Object로 전달합니다.

Dim result As IAsyncResult = CType(request.BeginGetRequestStream(AddressOf GetRequestStreamCallback, request), IAsyncResult) 

당신은 state 매개 변수에 result을 전달하는, 그리고 그 값은 전달 IAsyncResultAsyncState 특성에 설정됩니다 : 현재 당신은. 두 개의 값을 전달하려면

, 당신은 몇 가지 선택 사항이 있습니다

  1. 별도의 속성으로 resultindex 값이 새 개체를 만듭니다.
  2. Object의 배열을 만듭니다. 첫 번째 항목은 요청이고 두 번째 항목은 인덱스입니다. 그런 다음 AsyncState 속성을 가져 와서 개체 배열에 대고 항목을 떼어 낼 수 있습니다.
  3. 두 값에서 Tuple을 만들고 state 매개 변수에 Tuple을 전달하십시오.

두 번째를 선호하는 편이 쉽지만 Tuple을 만드는 것이 더 간편하고 (즉, 유형 안전) 거의 쉽습니다. https://stackoverflow.com/a/4555766/56778에 두 번째 방법에 대한 C# 예제가 있습니다.

관련 문제