2017-01-11 11 views
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からスレッドコードの大部分を引っ張ってきましたか?

おかげ

+1

あなたは、コードを実行するとどうなりますか?ブレークポイントを配置してコードを実行する必要があることを確認しましたか? –

+0

メインサブ全体が正常に動作し、エラーもなくなり、検索は数が増えます。ステップを進めると、カーソルは 'myThread.Start()'行に移動し、F11を押してから続けていくと、数分の1秒間何かします。関数のコードは決してデバッグでは知ることができません私がIDEに教えてくれる関数にブレークポイントを置くと、このブレークポイントは現在ヒットしません。デバッガのターゲットコードの実行可能コードはこの行に関連付けられていません_ –

+1

'Function ripitems'は' Sub ripitems'であるべきだと思います。あなたは実際に何も返されていません(Option Strict On **はこれを表示します)ので、 'Sub'はうまくいくはずです。 – Bugs

答えて

1

この方法はFunctionすべきではない:

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 

は、代わりにSubFunctionを置き換える:

Sub 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 Sub 
関連する問題