2 つのクラスを考えてみましょう。Producer
およびConsumer
(それぞれ独自のスレッドを持つ従来のパターンと同じ)。プロデューサーがイベントをトリガーするときに登録できるものProducer
を持つことは可能ですか? コンシューマーのイベントハンドラーは独自のスレッドで実行されますか? ここに私の仮定があります:Event
Consumer
Consumer
Producer
のイベントが自分のスレッド内でトリガーされたのか、別のスレッド内でトリガーされたのかはわかりません。の子孫で
Producer
もなく、メソッドが継承されていません 。Consumer
Control
BeginInvoke
PS。私は実装しようとしていませんProducer
-Consumer
パターン。これらは、プロデューサーをリファクタリングしてスレッドを組み込んでいる 2 つの単純なクラスです。
[アップデート]
問題をさらに拡大するために、可能な限り簡単な方法で作業するハードウェア ドライバーをラップしようとしています。たとえば、ラッパーにはStateChanged
メイン アプリケーションが登録されるイベントがあり、ハードウェアが切断されたときに通知されます。実際のドライバーはその存在を確認するためにポーリングする以外に手段がないため、スレッドを開始して定期的に確認する必要があります。使用できなくなったら、追加されたのと同じスレッドで実行する必要があるイベントをトリガーします。これが従来のプロデューサー/コンシューマー パターンであることはわかっていますが、ドライバー ラッパーを使用して単純化しようとしているので、ユーザー コードでコンシューマーを実装したくありません。
[アップデート]
この問題の解決策がないことを示唆するコメントがいくつかあるため、気が変わるかもしれないいくつかの行を追加したいと思います。BeginInvoke
私がやりたいことができると考えると、それは不可能ではないはずです(少なくとも理論的には)。独自のものを実装BeginInvoke
して 内で呼び出すことは、Producer
それを見る 1 つの方法です。それは私がどのようにそれを行うのか分からないというBeginInvoke
ことです!