2016-08-25 14 views
0

私は定期的にクイック操作を行う必要があるプログラムがあります。 1秒ごとに実行することをお勧めします。特定の条件がオペレーションで満たされている場合は、特定のアクションを実行する必要があります。UIスレッドをブロックまたはスリープしないタイマーの説明

この周期的操作のUIでどのような方法を妨げないしなければならないと、プログラムの生活のために実行する必要があります。何かの形でSystem.Timers.TimerまたはBackgroundWworkerを使用する必要があるかどうかはわかりません。その2つより良いものがあれば、是非教えてください。

EDIT: 特定の条件の下では、メッセージボックスにUIをブロックする「終了」ボタンがポップアップ表示され、ボタンをクリックするとプログラム全体がシャットダウンする必要があることを忘れていました。

+0

バックグラウンドスレッドまたはUIスレッドによって「特定の条件」が検出されていますか? – adv12

+0

@ adv12私がやっていることについてもう少し説明してくださいね。タイマー(バックグラウンドスレッド)は、テキストファイルのエントリを監視する必要があります。特定のエントリが4回表示されると、UIを中断する必要があり、メッセージをUIにポップアップしてユーザーにこれを知らせ、プログラムを終了する必要があります。 –

+0

私はあなたの編集に応じて私の答えを更新しました。 – adv12

答えて

4

System.Timers.Timerは、バックグラウンドスレッドの結果でUIを更新する必要がない限り、チケットのように聞こえます。しかし、あなたはUIに何らかの形で干渉してはならないと言います。おそらく、あなたはこの必要性を持たないでしょう。

は、あなたの編集に対処し、質問にコメントするには:あなたはまだ System.Timers.Timerを使用することができますが、あなたは AlertAndExit(または何あなたはそれを呼び出す)メソッドを呼び出すために Control.Invokeまたは Control.BeginInvokeを使用してください。 (GUIスレッドで何かを呼び出すのではなく、ロックによって保護されているフラグを設定することもできますが、フラグが変更されたかどうかを確認するためには System.Windows.Forms.Timerを実行する必要があります

+0

クイック編集を追加しましたが、あなたの答えが変わったかどうかわかりません。 –

+0

私は 'Invoke'を使わなければならないと思っていました。私は、それらと 'EnableRaisingEvents'のものでたくさんの練習をしてきたので、とても気持ちがいいです。ありがとう!あなたは大きな助けになりました! –

0

回答は必要な作業によって異なります。 UIスレッドにマーシャリングする必要がなければ、System.Timers.Timerで十分です。 UIスレッドとは別のスレッドで動作しますので、問題なく毎秒経過するか遅くなることがあります。

関連する問題