- - PR -
VB .Netのタイマーについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-03-29 20:01
Public Class ClsDa01
Public TimeOutFlgA As Boolean Private TMaxCnt As Integer ''応答電文待ち Timer開始 Private Sub OutouMachi() Dim ini As New IniData Dim cls As New ClsUDP TimeOutFlgA = True ini = cls.GetIniData Try Do While TimeOutFlgA Call TimerEvent(Me, ini.TimeOut) ''リトライ TMaxCnt += 1 If ini.MaxCount = TMaxCnt Then TimeOutFlgA = False Return End If Loop Catch ex As Exception Return End Try End Sub ''Timer開始 Public Sub TimerEvent(ByVal sender As Object, ByVal interval As Integer) Call TimerStart(interval) TimeOutFlgA = False Do Windows.Forms.Application.DoEvents() If Not Status = TimerStatus.timRun Then TimeOutFlgA = True Exit Do End If Loop End Sub End Class 現在system.timers.timerを使用しています。 仕様としては、タイムアウト内に電文がこなければ再送するというものです。 Timerの使い方はわかったのですが、その途中で電文受信のイベントを走らすことって無理なのでしょうか? 今、わからないのはタイムアウトになるのを待ってから受信イベントが走っているので、 どうにかタイマーが動いている時でも中止して受信イベントを走らせたいです。 何か方法はありますか? また、どういうふうにした方がいいとかあれば教えてください。 わかりにくい説明になったと思いますがよろしくお願いします。 | ||||||||
|
投稿日時: 2005-03-30 06:21
近くにThreadがあるので、返答0も気の毒と思い、レスします。
Timerを同期処理で待つ以上、うまい方法は同じThread(Windowsのです)内では無い様に思います。もうひとつの処理を同じThreadでするのではなくて、別のThreadを使うマルチシュレッド処理をすれば、不安定な状態がなく、処理できます。Threadを新たに作ること自体は、Invoke命令でSubRoutineを呼べば簡単ですが、そのSubRoutineの中で、FormのControlにアクセスするのは、別に、Formを所有する元のThreadに依頼しないといけないという注意事項があります。Unixなどで、マルチシュレッドの経験があればそんなに難しくありませんが。全く初めてなら、抵抗があるかもしれません、この辺がレスがない理由かもしれません。ヒントとしてください。 | ||||||||
|
投稿日時: 2005-03-30 07:40
これです。
Alertだったか、時間がきたらメソッドを実行する、ってのが無かったですか? っつうか、これだとTimerになってないし。。。 _________________ |
1