【问题标题】:vb.net HttpWebRequest BeginGetResponse parametersvb.net HttpWebRequest BeginGetResponse 参数
【发布时间】:2014-02-06 22:12:30
【问题描述】:

我正在做线程化的网络请求。如何将参数“index”从 Start() 子传递到 GetResponseCallback()?

两个潜艇:

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

【问题讨论】:

    标签: multithreading parameters webrequest


    【解决方案1】:

    在最后一个参数中将它作为Object 传递给BeginGetRequestStream。目前您有:

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

    您在state 参数中传递result,并且该值在传递的IAsyncResultAsyncState 属性中设置。

    如果你想传递两个值,你有一些选择:

    1. 创建一个具有resultindex 值作为单独属性的新对象。
    2. 创建一个Object 数组,其中第一项是请求,第二项是索引。然后,您可以获取 AsyncState 属性,将其转换为对象数组,然后剥离项目。
    3. 根据您的两个值创建一个Tuple,并将该Tuple 传递到state 参数中。

    我更喜欢第二个,因为它非常简单,但创建 Tuple 更简洁(即类型安全)并且几乎同样简单。我在https://stackoverflow.com/a/4555766/56778 有第二种方法的 C# 示例。

    【讨论】:

      猜你喜欢
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多