WebRequest.BeginGetRequestStream provides an asynchronous version of the GetRequestStream method.
Imports System Imports System.Net Imports System.IO Imports System.Text Imports System.Threading Imports Microsoft.VisualBasic Public Class RequestState Public request As WebRequest Public Sub New() request = Nothing End Sub ' New End Class ' RequestState Class WebRequest_BeginGetRequeststream Public Shared allDone As New ManualResetEvent(False) Shared Sub Main() Dim myWebRequest As WebRequest = WebRequest.Create("http://www.domain.com/") Dim myRequestState As New RequestState() myRequestState.request = myWebRequest myWebRequest.ContentType = "application/x-www-form-urlencoded" myRequestState.request.Method = "POST" Dim r As IAsyncResult = CType(myWebRequest.BeginGetRequestStream(AddressOf ReadCallback, myRequestState), IAsyncResult) allDone.WaitOne() Dim myWebResponse As WebResponse = myWebRequest.GetResponse() Dim streamResponse As Stream = myWebResponse.GetResponseStream() Dim streamRead As New StreamReader(streamResponse) Dim readBuff(256) As [Char] Dim count As Integer = streamRead.Read(readBuff, 0, 256) While count > 0 Dim outputData As New [String](readBuff, 0, count) Console.WriteLine(outputData) count = streamRead.Read(readBuff, 0, 256) End While streamResponse.Close() streamRead.Close() myWebResponse.Close() End Sub Private Shared Sub ReadCallback(asynchronousResult As IAsyncResult) Dim myRequestState As RequestState = CType(asynchronousResult.AsyncState, RequestState) Dim myWebRequest As WebRequest = myRequestState.request Dim streamResponse As Stream = myWebRequest.EndGetRequestStream(asynchronousResult) Dim postData As String = Console.ReadLine() Dim encoder As New ASCIIEncoding() Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData) streamResponse.Write(byteArray, 0, postData.Length) streamResponse.Close() allDone.Set() End Sub End Class