2009-03-14 1 views
0

申し訳ありませんがこれは初心者の質問です。VBサブルーチンの再トリガ、実行をシリアル化する方法は?

私はタイマーによってトリガされるVB.NETサブルーチンを持っています。私は時々、ルーチンが長時間実行されると、ルーチンがまだ予期しない結果で実行されている間に再度トリガーされることを発見しました。これは正常ですか?ルーチンの各コピーは独自のスレッドで実行されていますか?ルーチンを直列化する方法はありますか?今はブール値を使って入力時にTrue、入力時にFalseを設定するので、入力時にルーチンが実行されているかどうかを確認できますが、よりエレガントなものがあると思っています。

+0

これはSystem.Windows.Forms.Timerですか、System.Timers.Timerですか? –

答えて

2

サブルーチンの実行を開始するときにタイマーを停止し、終了時にもう一度タイマーを開始します。

予期しない終了時にタイマーが再起動されるように、エラー処理を含めることをお勧めします。

1

System.Windows.Forms.Timerはシングルスレッドであるので、私はあなたが既に実行されている間、Tickイベントが呼び出されている必要があるだろうということに驚き(定義によって、UIスレッドを占有しなければならない、と電話をかけることができない)だ

は私が

System.Timers.Timer

がマルチスレッドです... Tickイベントがキューイングし、順次起こって見ることができる、そしてあなたが記述状況を持つことができます。 (それらのいずれかを使用している場合は、 System.Windows.Forms.Timerに切り替えると、少なくともイベントが互いに干渉しないようになります)