Vb.net Web请求是一种类型,不能用作表达式

Vb.net Web请求是一种类型,不能用作表达式,vb.net,httpwebrequest,windows-phone-8,webbrowser-control,windows-phone,Vb.net,Httpwebrequest,Windows Phone 8,Webbrowser Control,Windows Phone,我正在为Windows Phone制作一个应用程序,因为我需要一些保存在Web浏览器控件中的登录cookie,所以我正在使用下面的代码:创建一个HTTPWebRequest并获取一些JSON数据进行解析,但我在这段代码的最后一行遇到两个错误 Dim browser = New WebBrowser() Dim brwhttp = GetType(WebRequestCreator).GetProperty("BrowserHttp") Dim requestFactory =

我正在为Windows Phone制作一个应用程序,因为我需要一些保存在Web浏览器控件中的登录cookie,所以我正在使用下面的代码:创建一个HTTPWebRequest并获取一些JSON数据进行解析,但我在这段代码的最后一行遇到两个错误

 Dim browser = New WebBrowser()
    Dim brwhttp = GetType(WebRequestCreator).GetProperty("BrowserHttp")
    Dim requestFactory = TryCast(brwhttp.GetValue(Browser, Nothing), IWebRequestCreate)
    Dim uri = New Uri("some-url")
    Dim req = requestFactory.Create(uri)
    req.Method = "GET"
    req.BeginGetResponse(New AsyncCallback(request_CallBack), WebRequest)
(1) .'WebRequest“”是一个类型,不能用作表达式。 (2). 委托“System.AsyncCallback”需要“AddressOf”表达式或lambda表达式作为其构造函数的唯一参数

如何修复

更新1:通过在“请求_回调”之前添加“的地址”修复了错误(2),但错误(1)仍然存在。
更新2:修复了所有错误,但没有得到任何响应(空)。我的代码有什么问题?

问题在于行
req.BeginGetResponse(新的AsyncCallback(请求回调),WebRequest)
这有两个问题

  • VB.Net没有真正的第一类函数,因此您必须使用操作符的
    地址来创建委托。此外,编译器将推断委托类型,因此您不需要构造函数
  • BeginGetResponse将状态对象作为第二个参数,而不是类型表达式。这是回调中需要的任何内容
  • 因此:

    如果需要将类型传递给请求回调,请使用

    req.BeginGetResponse(AddressOf request_CallBack, GetType(WebRequest))
    
    然而,这看起来像是一个复制更改,您想要的可能是

    req.BeginGetResponse(AddressOf request_CallBack, req)
    

    @user2141754已更正,除非您需要将信息传递给请求\u Callback这是我的请求\u回调代码:
    Private Sub request\u回调(asyncResult作为IAsyncResult)Dim webRequest作为HttpWebRequest=DirectCast(asyncResult.AsyncState,HttpWebRequest)Dim webResponse作为HttpWebResponse=DirectCast(webRequest.EndGetResponse(asyncResult),HttpWebResponse)Dim tempStream As New MemoryStream()webResponse.GetResponseStream().CopyTo(tempStream)Dim sr As New StreamReader(tempStream)Dim resp As String=sr.ReadToEnd MessageBox.Show(resp)End Sub
    在第1行抛出错误。无法将“System.RuntimeType”类型的对象强制转换为“System.Net.HttpWebRequest”类型。非常感谢!但最后一行还有一个错误:无效的跨线程访问。System.Windows.ni.dll中出现“System.UnauthorizedAccessException”类型的异常,但未在用户中处理code@user2141754请尝试
    Me.Invoke(addressof Messagebox.Show)
    在UI threadMe上执行它。WP上显然不存在Invoke。
    req.BeginGetResponse(AddressOf request_CallBack, req)