私はASP.net(VB)の完全な初心者です。経験豊富なメンバーにとって質問が明白すぎる場合は、ご容赦ください。
ターゲットURLがデータを提供するのに時間がかかる場合に備えて、非同期モードで単純なWebRequestを作成しようとしました。以下のコードでは、コールバックブロック(RespCallback)が毎回正しく呼び出されるかどうかを確認したいだけです。すべてがうまくいけば、「GetData」サブを呼び出すボタンをクリックするたびに、lblResultに文字列「123」が追加されているはずです。
ただし、lblResultには、最初のクリック後にのみ123が表示されます。その後のクリック後、RespCallbackが呼び出されないかのように、lblResultには「12」が追加されるだけです。Visual Studioでこれをデバッグしようとすると、実行は実際にはRespCallback部分に直接ステップインし、lblResult.Textウォッチは実際には「123123」を表示しますが、結果のWebページは常に「12312」のみを表示します。
ここでは基本的なものが欠けていると思いますが、何がわからないのです。私はそれがブラウザのキャッシュに関係しているとさえ推測していました(したがって、結果は2回目に変更されます)が、それを修正する方法もわかりません。
誰か助けてもらえますか?前もって感謝します。
ジム
Dim myWebRequest As WebRequest
Public Shared allDone As New ManualResetEvent(False)
Private Shared BUFFER_SIZE As Integer = 1024
Public Class RequestState
' This class stores the state of the request
Private Shared BUFFER_SIZE As Integer = 1024
Public requestData As StringBuilder
Public bufferRead() As Byte
Public request As WebRequest
Public response As WebResponse
Public responseStream As Stream
Public Sub New()
bufferRead = New Byte(BUFFER_SIZE) {}
requestData = New StringBuilder("")
request = Nothing
responseStream = Nothing
End Sub ' New
End Class ' RequestState
Public Sub GetData(Sender As Object, Args As System.EventArgs)
lblResult.Text += "1"
myWebRequest = WebRequest.Create(dataURL)
Dim myRequestState As New RequestState()
myRequestState.request = myWebRequest
' Start the asynchronous request.
Dim asyncResult As IAsyncResult = CType(myWebRequest.BeginGetResponse(AddressOf RespCallback, myRequestState), IAsyncResult)
lblResult.Text += "2"
allDone.WaitOne()
End Sub
Private Sub RespCallback(asynchronousResult As IAsyncResult)
lblResult.Text += "3"
allDone.Set()
End Sub