複数のサブシステムが異なるスレッドで実行されているアプリケーションがあります(つまり、スレッドはGPSを監視し、スレッドはRFIDリーダーなどを監視します)。スレッドは、winフォーム部分とは別個のサービスレジストリによって開始および監視されます。Winフォームアプリケーションで複数のスレッドを処理する最良の方法
最初のリリースでは、更新タイマーで実行される単一のフォームがあり、各サブシステムの静的変数の値を毎秒確認しています。
私は余分なフォームを追加しているので、これをきれいにしようとしています。現在のアプローチではスレッドの安全性はほとんどありません。それぞれのフォームが気になるイベントだけに登録できるように、基本的な状態が変更されたときに、各サブシステムが新しいイベントをスローするようにして、より反応の良いUIに移行することができます...私は更新タイマーのアプローチが嫌いです。
サブシステムスレッドでイベントがトリガーされるため、ここで問題が発生しています。そのため、イベントと一緒に渡された状態でUIを更新しようとすると、スレッド間呼び出しに関するSystem.InvalidOperationException例外が発生します。
msdnのドキュメントを読んだ後で、私が更新したいフィールドごとにcontrol.invokeを使用しています。フィールドの多い複雑なフォームにはかなり迷惑で、サブシステムを実行するバックグラウンドワーカーを使用しますまたはフォームがまだタイマーで実行され、サブシステム自体を照会することができます。これは避けようとしています。私はフォームを可能な限り基礎となるシステムとは別にしたいと思っています。彼らは気になるイベントだけを知り、関連するフィールドを更新する必要があります。
私の質問は、私はここで何が分からないのですか?サブシステムが独自のスレッドで実行できるようにこのシステムを設計することができますが、まだ結合されていない方法で通知を送信するには、より良い方法がありますか?
任意のヘルプは大
歓声
nimai