データをリッスンして文字列のConcurrentQueueにプッシュするクラスを1つのスレッドで実行しています。 Enqueueを使用してデータを追加しています。キューの長さが増えているので、データが正しくキューされていることがわかります。VB.Net:スレッド上のConcurrentQueueからアイテムを取得する
別のスレッドで実行される別のクラスは、FIFOベースで各データを取り出す必要があります。しかし、それは単に何もしません。
Dim data As String = Nothing
While Globals.queueMessages.Count > 0
queueMessages.TryDequeue(data)
If (data IsNot Nothing) Then
Console.WriteLine(data)
Else
Console.WriteLine("Failed to dequeue")
End If
End While
と同様にカウントを使用して、キュー内の項目数をチェックする()私は、あまりにものisEmptyを試してみた:ここはキューからデータをプルする必要があることループです。同じ結果!
C#でConcurrentQueueを使用することについての記事がかなりあるようですが、VB.Netの例は見つかりませんでした。
ヘルプ!
更新:私のWhile ... Endでの終了While ... Whileループは機能しますが、何も起こっていないときにスレッドを張っているので、おそらく推奨されません。これを行うよりエレガントな方法はありますか?
ブール値フラグを使用することについてのヒントは、私はそれを考えていませんでした。スレッドにはsleep()プロパティがありません。 Dim threadParser AsをTask = Nothingとして作成してから、threadParser = Task.Factory.StartNew(Sub()Parser.Process())でスレッドを開始すると、スレッドへの切り替えが改善されるでしょうか? –
一般的なルールはスレッドプールスレッドでスリープしません。それが短命のものなら、それに向かう。あなたのスレッドがアプリケーションの寿命の間にハングアップする場合は、専用のスレッドを追加します。読み込みsystem.threading thread.sleepにアクセスする – FloatingKiwi
Windowsアプリケーションがある限り、スレッドはハングします。理想的には、これは数日または数週間かかるため、スレッドに変換して正常に動作しています。どうもありがとうございました ! –