bool
プロパティをチェックしている間、現在のコードはタイトなwhile(true)
ループを実行しています。このプロパティはlock()
を汎用List<T>
に置き、項目がない場合はtrueを返します(list.Count == 0
)。
ループには、メッセージポンプが処理を続行することを確認するために恐れがあるApplication.DoEvents()
が含まれています。そうでない場合、アプリケーションがロックされます。
明らかに、これは必要です。
私の混乱は、キュー上の長さを確認できる基本的なリファクタリングを開始する方法です。スレッドで実行していて、何の理由もなくCPUを吹き飛ばすことはありません。ここでのチェックの間の遅延は、たとえ100ms +のような "長い"ものであっても、問題ありません。
私はメソッドの非同期を行い、チェックを行うには、タスクの実行をすることができますアプローチで行くつもりだった:もちろん
await Task.Run(() => KeepCheckingTheQueue());
、これはする必要が方法の状況で私を続けています。.. 。ループを使ってキューの状態を確認する。
このスレッドをスレッドプールに移動するのに使用できる待機中、待機中、およびその他のさまざまな方法...これをどのように処理するのがベストか?
処理のスレッドを開始し、終了するとイベントが発生します。あなたはイベントを処理することができ、loop-> checkstatusの必要はありません。 [バックグラウンドワーカー](https://msdn.microsoft.com/en-us/library/cc221403(v=v1).aspx)に入れ、RunWorkerCompletedイベントを使用する – bansi
リストを置き換えることができますか?例えば、 'ConcurrentQueue'? –
リストタイプの置き換えは可能ですか? 'IList'を実装した独自のクラスを持たないことができますか?本当のリストが裏付けされていて、 'Remove'がカウントを0にすると(または' Clear'が呼び出されたときに)望ましい動作をトリガーします。 –