0
私は、内部のWebサイトが検索結果を正しく返していることを確認するために小さなWebスパイダーを作成しました(さまざまな理由で1日に1回程度)。それは連続して実行されますが、時間がかかりますので、その一部を独立したスレッドに分割したいと考えていました。vb.netスレッドが起動していない
以下のコードは、「ripitems」という機能を起動していないようですが、後で読むことができるファイルが残っています。
Sub doSearch()
Dim myVar As System.Collections.ObjectModel.ReadOnlyCollection(Of IWebElement)
Dim csvFile As String, myContinue As Boolean
Dim objWriter As TextWriter
Dim myDriver As New Chrome.ChromeDriver
csvFile = My.Computer.FileSystem.SpecialDirectories.MyDocuments _
& "\Catalogue Download - " & Format(Now(), "yyyymmdd") & ".csv"
objWriter = TextWriter.Synchronized(File.AppendText(csvFile))
For i = 2 To 10
myDriver.Navigate.GoToUrl("mysite/search?QueryExpr=" & searchFor & "&pid=" & i)
myVar = myDriver.FindElementsByClassName("upperContainer")
Dim myThread As New Thread(Sub() ripitems(myVar, objWriter))
myThread.Start()
Next
End Sub
Function ripitems(ByVal elementCollection As System.Collections.ObjectModel.ReadOnlyCollection(Of IWebElement), ByVal fHandle As TextWriter)
[... irrelevant code to find items and prices ...]
For i = 0 To elementCollection.Count - 1
fHandle.Write(thisPN(i) & "," & thisPrice(i))
Next
End Function
私は私が間違って何をした 、this SE answerからスレッドコードの大部分を引っ張ってきましたか?
おかげ
あなたは、コードを実行するとどうなりますか?ブレークポイントを配置してコードを実行する必要があることを確認しましたか? –
メインサブ全体が正常に動作し、エラーもなくなり、検索は数が増えます。ステップを進めると、カーソルは 'myThread.Start()'行に移動し、F11を押してから続けていくと、数分の1秒間何かします。関数のコードは決してデバッグでは知ることができません私がIDEに教えてくれる関数にブレークポイントを置くと、このブレークポイントは現在ヒットしません。デバッガのターゲットコードの実行可能コードはこの行に関連付けられていません_ –
'Function ripitems'は' Sub ripitems'であるべきだと思います。あなたは実際に何も返されていません(Option Strict On **はこれを表示します)ので、 'Sub'はうまくいくはずです。 – Bugs