- - PR -
VB.NET 複数タイマーの処理について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-18 15:15
いつも大変有意義に拝見させていただいております。
こちらには初めて書き込みさせていただきます。 早速ですが、質問させていただきます。 VB.NET 2005にて、複数のタイマーを起動して、共通のタイマーイベントルーチンで処理したいのですが、どのようにすればよいかわかりません。 2つのタイマーを起動した場合、1つのタイマーイベントルーチンで、どちらのタイマーからの割り込みかを判断する方法はありませんでしょうか? タイマーに関係するところだけ抽出します。 MSDNやVB.NETをいろいろ調べておりますが、どうしてもわからないため質問させていただきます。 ご教授のほど、よろしくお願いいたします。 Imports System Imports System.Timers Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim aTimer As New System.Timers.Timer() Dim bTimer As New System.Timers.Timer() ' Hook up the Elapsed event for the timer. AddHandler aTimer.Elapsed, AddressOf OnTimedEvent AddHandler bTimer.Elapsed, AddressOf OnTimedEvent ' Set the Interval to 2 seconds (2000 milliseconds). aTimer.Interval = 20000 aTimer.Enabled = True bTimer.Interval = 10000 bTimer.Enabled = True End Sub Private Shared Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs) 'この中で、aTimer , bTimer からのイベント処理を区別したいのです End Sub | ||||||||
|
投稿日時: 2007-06-18 15:46
メソッドの引数は?
| ||||||||
|
投稿日時: 2007-06-18 15:57
Timer を メンバ変数にして、
source.Equals(aTimer) で判断するとか 関係ないかもしれないけれどこれだと20秒止まらない? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-06-18 15:57
イベントハンドラの第一引数を見ればよろしいかと。
| ||||||||
|
投稿日時: 2007-06-18 16:03
早速ありがとうございます。 .NETは、まだ初心者のため、お手数おかけいたしますが、もう少し具体的にご教授いただけませんでしょうか? メンバ変数はわかりますが、具体的にどのような記述をしたらよいでしょうか? | ||||||||
|
投稿日時: 2007-06-18 16:05
早速ありがとうございます。 ウォッチで、イベントハンドラの第一引数を確認したのですが、 aTimer , bTimer での違いがわかりませんでした。 どれかの引数(メンバ変数)を確認することで、違いがわかるのでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2007-06-18 16:54
こんなかんじ?
あれ? OnTimedEvent ってなんで Shared なんですか? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-06-18 17:17
マイクロソフトのイベントのガイドラインでは、イベントの第一引数としてそのイベントを発生させたオブジェクトを渡すように言われています。
Timerクラスでもそのような実装になっています。 つまり、OnTimedEventイベントハンドラが呼ばれたとき、その第一引数に原因になったタイマークラスのオブジェクトが渡されてくるはずです。 ですので、それがふたつのTimerオブジェクトのどちらかを判断すれば良いです。 ObjectクラスのEquals()メソッドは、同じオブジェクトかどうかを調べます。 あと、イベントハンドラにOnXXXXXという名前を付けないでください。 ガイドラインでは、イベントを発生させるメソッドにOnXXXXXという名前を付けるように言われていますので紛らわしいです。 参考: http://msdn2.microsoft.com/ja-jp/library/ms229011(VS.80).aspx [ メッセージ編集済み 編集者: 一郎 編集日時 2007-06-18 17:18 ] |