0

だから私は、スケジューラ型プログラムの他の誰かのコードに取り組んでいます。彼は、10 秒ごとに実行するタイマーを作成して、実行する必要があるスケジュールのリストをチェックします。スケジュールがあるかどうか、または現在実行中のスケジュールがあるかどうか (それぞれ黄色と緑色) に応じて、Schedule.button.forecolor を更新するように変更しました。タイマーのコードは、スケジュール フォーム ファイルにあります。

問題は、タイマーがプロジェクトの起動時に呼び出されることです。これにより、ユーザーが実際にタイマーを開始するためにスケジューラ フォームをクリックする必要がなくなります。ただし、このタイマーが起動時に呼び出されると、タイマーはフォーム コード上にあるため、タイマーを開始するためにこのフォームのインスタンスが作成されます。もちろん、後でページにアクセスしたときは別のインスタンスなので、ボタンは更新されません。

この問題を解決するにはどうすればよいですか? 古いコードをリファクタリングしてタイマー インスタンスを別のファイルに分離し、それを呼び出す必要がありますか? または、起動時にタイマーを開始するより良い方法はありますか?

4

1 に答える 1

2

単一責任のために、すべてのUIからタイマーコードを分離することをお勧めします。(タイマークラスで)適切な時間にカスタムCheckForUpdatesイベントを発生させることができます。このイベントは、ボタンの更新が必要なすべてのマスク/インスタンスでキャッチされます。

これにより、コードもより拡張可能になります。

編集:あなたのプロジェクトにもデータベースが含まれていますか?実行するタスクがあるかどうか、タイマーが10秒ごとにチェックするように私には思えます。このチェックがサーバーサイドであると、より効率的になります。また、タスクを実行する必要があるたびに、サーバーはクライアントにメッセージを送信します。

于 2013-01-21T17:46:14.717 に答える