• ベストアンサー

.NetのTimerについて

Timerを使用して5秒までに応答電文がこなかったらエラーメッセージを出すプログラムを作成しています。 .Netは初心者なものでTimerの使い方がよくわかりません。 クラスからTimerを動かすことはできないのでしょうか? 作成しているプログラムはFormがいらないので、TimerだけFormにおいて非表示で使おうかなと思っています。 どうしたらよいでしょうか? また、この場合だとTimerではない方がいいですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

画面を持たないなら、時間を独自で計測しっちゃった方が、シンプルのような気もします。 Module Module1   Private Declare Function timeGetTime Lib "winmm.dll" Alias "timeGetTime" () As Integer   Private Const LIMIT_TIME As Integer = 5000   Sub Main()     Dim intTime As Integer = timeGetTime     Do       Application.DoEvents()       If (timeGetTime - intTime > LIMIT_TIME) Then         MsgBox("タイムアウト")         Exit Sub       End If       '応答電文受信確認処理コール       'if 正常受信 then       '  exit do       'end if     Loop   End Sub End Module クラスでタイマを派生させるサンプルも置いておきます。 ※Module1.vb Module Module1   Private Const LIMIT_TIME As Integer = 5000   Sub Main()     Dim objClass1 As New Class1()     objClass1.TimerStart(LIMIT_TIME)     Do       Application.DoEvents()       If Not objClass1.Status = Class1.TimerStatus.timRun Then         MsgBox("タイムアウト")         GoTo PGMEND       End If       '応答電文受信確認処理コール       'if 正常受信 then       '  exit do       'end if     Loop PGMEND:     objClass1 = Nothing   End Sub End Module ※Class1.vb Public Class Class1   Enum TimerStatus     timFree     timRun     timEnd   End Enum   Private stsTimer As TimerStatus   WithEvents objTimer As System.Timers.Timer   Protected Overrides Sub Finalize()     If Not (objTimer Is Nothing) Then       objTimer.Enabled = False     End If     objTimer = Nothing     MyBase.Finalize()   End Sub   Public Sub New()     stsTimer = TimerStatus.timFree   End Sub   Public ReadOnly Property Status() As TimerStatus     Get       Return stsTimer     End Get   End Property   Public Sub TimerStart(ByVal inInterval As Integer)     objTimer = New System.Timers.Timer()     With objTimer       .Interval = inInterval       .Enabled = True     End With     stsTimer = TimerStatus.timRun   End Sub   Private Sub objTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles objTimer.Elapsed     Debug.WriteLine("タイマイベント発生")     objTimer.Enabled = False     stsTimer = TimerStatus.timEnd   End Sub End Class

okkomu
質問者

お礼

詳しい説明ありがとうございました! 動く様になりました。 とても助かりました!ありがとうございます!!

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

System.Windows.Forms.TimerではなくSystem.Timers.Timerがよろしいかと

okkomu
質問者

お礼

ありがとうございます! 調べてやってみたいと思います。

関連するQ&A

  • Timerの割り込みイベントをつくりたい

    以前VB .NetでSystem.Timers.Timerのことで質問したものです。 今回、作り直そうと思っているので書き込みました。 したいことは・・・ 1.タイムアウトを3回して電文がこない場合はエラーを返す。 2.タイムアウト内に電文がきた場合はタイマーを中止し、電文処理をする 上記をするにはどうしたら良いですか? 作成にあたりポイントなどありましたら教えて下さい。 よろしくお願いします。

  • TIMERについて

    VB6.0 SP5での質問です フォーム一つのみをもつ、 単純なプログラムがあるとします。 (1)フォームにはTimerオブジェクトが貼り付けてあり 1秒ごとに、イベントが起きるようにします。 (2)それと同じ構造のプログラムをもうひとつ作ります。 (1)のフォームから(2)のプログラムを読み出す ボタンを追加します。 EXEファイルを作成します。 (1)の(2)を読み出すボタンを押して(2)を起動した時に、 (1)で動いているTimerは一体どうなるのでしょうか? (2)のEXEが開いているうちも、動きつづけるのでしょうか? 一つのプロジェクトの中に2つのフォームがあった場合 だと、2つ目のフォームを開いていても、 1つめのフォームrのTimerは動いているようでした。 別EXEの場合はどうなるのでしょうか? どなたか至急教えてください。お願いします。

  • Rav Timerって?

    終了時 「プログラムが終了できません。Rav Timer exe.が応答していません」という表示が時々でるようになりました。Rav Timerとは何のプログラム?でしょうか。ウイルスキラー2005を使っています。

  • C#のTimerについて

    こんにちは。 C#のプログラミングについてわからないところがありますのでご回答いただければと思います。 私はC#を用いて簡単な計算ゲームを作成しています。 その計算ゲームには対戦相手がおり、対戦相手の正解数はTimerを用いてユーザーに練習問題を解かせた時の解答時間を基に勝手に正解数が増えていくといったシステムにしています。 そこで1つ解決できない問題が浮上しました。 対戦相手の数を4人にして4人バラバラに解答しているような動きにしたいため、Timerを4つ設けそれぞれを動かせるようなプログラムを作成しました。 エラーもなく普通に実行できます。 しかしTimer1とTimer2は正常に動き対戦相手の正解数が増えていくのですが、Timer3とTimer4が全く反応していないのか、動かず、対戦相手の正解数が増えません。 プログラムの内容はTimer1~Timer4も対応する変数が違うこと以外一緒です。 原因は何であるかわかる方教えてください! C#ではTimerの使用数が2つまでとなっている?ってことなのでしょうか? スレッドを用いる方法もあると思いますが、Timerを4つ並べてそれぞれを動作させる方法があるのでしたら是非教えてください。 最後になりましたが、わかりにくい文章で本当に申し訳ありません。 よろしくお願いします。

  • Timerイベントについて

    同一フォーム上にTimer(Interval=1000)とCommandButtonを貼り付けCommandButtonをクリックするとMsgboxを表示するプログラムを作成しましたが、Msgboxを表示している間Timerイベントは動いていないようで、Msgboxを閉じると動き出すようようです。 これは仕様なのでしょうか。回避策または代替プログラムはあるでしょうか? よろしくお願いします。

  • Timer_Tickについて

    Timerイベントについてですが、Interval = 1 に設定し、例えば下記のようなプログラムを動かした場合、 /*-------------------------------------------*/ Private Sub Form_Load(~~)~~     Timer1.Start()     Original() '自作プロシージャ End Sub Private Sub Timer1_Tick(~~)~~     num += 1 'Publicで宣言してある     if num > 100 then Timer1.Stop() End Sub /*-------------------------------------------*/ Original()の処理に移るのは、numが100より大きくなってTimer1がStopしてからでしょうか? それとも、Timer1が動いている最中に、移ってるのでしょうか?

  • Timerを使用しての強制待機

    Timerを使用しての強制待機を教えてください。 例えば、VBでのプログラム上でTimerを用いて 強制的に10秒待機させるには どうすればいいですか? ただし、イベントを介しての時間待機ではなくて 単純にプログラムを待機させる方法を教えてください。   皆様宜しくお願いします。

  • スレッドでWM_TIMERを受け取れない

    スレッドの中でタイマー処理を行いたいのですが、WM_TIMERが受け取れません。 というか、メッセージマップ内でON_WM_TIMER()と記述すると、型が違うとエラーが出てしまいます。 どなたか、スレッド内でタイマー処理を行うすべを教えて下さい。よろしくお願いします。 CWinThreadを派生したクラス内での処理です。

  • MFC Timerについて

    MFCのTimerの利用方法をいろいろ調べたのですが。 理解できずに困っています。 MFCのダイアログベースで作成し、ボタンを押したら Timer(1秒ごと)でエディットボックスに表示させるというものです。 ・ベースのウィンドウにボタンとエディットボックスを作成しました。 ・次に ボタンをダブルクリックし以下のように書きました。 void CtestDlg::OnBnClickedButton() {     int x=0; char buf[10000]; x++; sprintf(buf,"%d",x); (labelの変数名)_edit.SetWindowText(buf); } ・SetTimer(1, 1000, NULL);を用いて ボタンがクリックされたら1秒ごとにxの値をエディットボックスに表示させるようにしたいのですが。 OnTimer(UINT nIDEvent) Close()やKillTimer(1);をもちいらなければならないことはわかったのですが。 作業手順がわかりません。 詳しい 作業手順をおしえてください。 プログラム完成まで 教えていただけるととてもうれしいです。 プログラマーの方よろしくお願いします。

  • Timerの処理が分かりません

    まだ卒論でVB.Netをやることになりますた。 質問なんですが、Timerで悩んでいます。ボタンをクリックして、配列にテキストデータを格納していき、Timerを起動して5秒毎にLabelに配列に入っている単語を表示したいのですが、Timerとの関連付けが出来ません。どなたか詳しい方教えていただけませんか?お願いします。