- ベストアンサー
.NetのTimerについて
Timerを使用して5秒までに応答電文がこなかったらエラーメッセージを出すプログラムを作成しています。 .Netは初心者なものでTimerの使い方がよくわかりません。 クラスからTimerを動かすことはできないのでしょうか? 作成しているプログラムはFormがいらないので、TimerだけFormにおいて非表示で使おうかなと思っています。 どうしたらよいでしょうか? また、この場合だとTimerではない方がいいですか?
- okkomu
- お礼率35% (59/167)
- Visual Basic
- 回答数2
- ありがとう数3
- みんなの回答 (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
その他の回答 (1)
- todo36
- ベストアンサー率58% (728/1234)
System.Windows.Forms.TimerではなくSystem.Timers.Timerがよろしいかと
お礼
ありがとうございます! 調べてやってみたいと思います。
関連するQ&A
- Timerの割り込みイベントをつくりたい
以前VB .NetでSystem.Timers.Timerのことで質問したものです。 今回、作り直そうと思っているので書き込みました。 したいことは・・・ 1.タイムアウトを3回して電文がこない場合はエラーを返す。 2.タイムアウト内に電文がきた場合はタイマーを中止し、電文処理をする 上記をするにはどうしたら良いですか? 作成にあたりポイントなどありましたら教えて下さい。 よろしくお願いします。
- 締切済み
- Visual Basic
- TIMERについて
VB6.0 SP5での質問です フォーム一つのみをもつ、 単純なプログラムがあるとします。 (1)フォームにはTimerオブジェクトが貼り付けてあり 1秒ごとに、イベントが起きるようにします。 (2)それと同じ構造のプログラムをもうひとつ作ります。 (1)のフォームから(2)のプログラムを読み出す ボタンを追加します。 EXEファイルを作成します。 (1)の(2)を読み出すボタンを押して(2)を起動した時に、 (1)で動いているTimerは一体どうなるのでしょうか? (2)のEXEが開いているうちも、動きつづけるのでしょうか? 一つのプロジェクトの中に2つのフォームがあった場合 だと、2つ目のフォームを開いていても、 1つめのフォームrのTimerは動いているようでした。 別EXEの場合はどうなるのでしょうか? どなたか至急教えてください。お願いします。
- ベストアンサー
- Visual Basic
- Rav Timerって?
終了時 「プログラムが終了できません。Rav Timer exe.が応答していません」という表示が時々でるようになりました。Rav Timerとは何のプログラム?でしょうか。ウイルスキラー2005を使っています。
- 締切済み
- Windows XP
- 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を閉じると動き出すようようです。 これは仕様なのでしょうか。回避策または代替プログラムはあるでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- 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が動いている最中に、移ってるのでしょうか?
- 締切済み
- Visual Basic
- Timerを使用しての強制待機
Timerを使用しての強制待機を教えてください。 例えば、VBでのプログラム上でTimerを用いて 強制的に10秒待機させるには どうすればいいですか? ただし、イベントを介しての時間待機ではなくて 単純にプログラムを待機させる方法を教えてください。 皆様宜しくお願いします。
- ベストアンサー
- Visual Basic
- スレッドでWM_TIMERを受け取れない
スレッドの中でタイマー処理を行いたいのですが、WM_TIMERが受け取れません。 というか、メッセージマップ内でON_WM_TIMER()と記述すると、型が違うとエラーが出てしまいます。 どなたか、スレッド内でタイマー処理を行うすべを教えて下さい。よろしくお願いします。 CWinThreadを派生したクラス内での処理です。
- 締切済み
- C・C++・C#
- 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);をもちいらなければならないことはわかったのですが。 作業手順がわかりません。 詳しい 作業手順をおしえてください。 プログラム完成まで 教えていただけるととてもうれしいです。 プログラマーの方よろしくお願いします。
- ベストアンサー
- C・C++・C#
- Timerの処理が分かりません
まだ卒論でVB.Netをやることになりますた。 質問なんですが、Timerで悩んでいます。ボタンをクリックして、配列にテキストデータを格納していき、Timerを起動して5秒毎にLabelに配列に入っている単語を表示したいのですが、Timerとの関連付けが出来ません。どなたか詳しい方教えていただけませんか?お願いします。
- ベストアンサー
- Visual Basic
お礼
詳しい説明ありがとうございました! 動く様になりました。 とても助かりました!ありがとうございます!!