- PR -

timerの扱いについてお聞きしたいのですが・・・・

1
投稿者投稿内容
k’s
会議室デビュー日: 2008/10/04
投稿数: 7
投稿日時: 2008-10-04 14:18
即出だったらすいません。

今現在あるアプリケーションを作っていてその中でtimerを使ってプログラムの流れを制御しているのですが、どうしても終了させるさいにtimerが正常に終了してないようでものすごく悩んでいます。
どなたかtimerをtimer.Stop()の方法以外で強制的に終了させる方法をご存知のかたはぜひご教授ください。
よろしくお願いします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-10-04 14:34
.NET には Timer がいくつかありますが、「どの」タイマーを使っているんでしょうか?
k’s
会議室デビュー日: 2008/10/04
投稿数: 7
投稿日時: 2008-10-04 15:05
すいません、それを書くのを忘れていました。
自分が使っている開発環境はC#です。
よろしくお願いします。
とーちゃん
会議室デビュー日: 2008/07/08
投稿数: 11
投稿日時: 2008-10-04 15:48
言語もそうですが、

System.Windows.Forms.Timer
System.Threading.Time
System.Timers.Timer

の内のどれでしょう?あるいはその他?って話じゃないかなと思います。

上記ののタイマーについてはこちらが参考になるかと。
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html
k’s
会議室デビュー日: 2008/10/04
投稿数: 7
投稿日時: 2008-10-04 15:58
たびたびすいません、タイマーはSystem.Windows.Forms.Timerの使っています。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-10-04 16:05
引用:

k’sさんの書き込み (2008-10-04 15:58) より:
たびたびすいません、タイマーはSystem.Windows.Forms.Timerの使っています。



Windows.FormsのTimerなら特に意識するべきことはないので、

> どうしても終了させるさいにtimerが正常に終了してないようで

というのはどのように判断されたのかが気になります。

どんなコードを書いていて、どんな現象が起きているのかを説明された方が
よいと思います。
とーちゃん
会議室デビュー日: 2008/07/08
投稿数: 11
投稿日時: 2008-10-04 17:40
外してたら恥ずかしいのですが、こんな処理かなと想像して。。
フォーム上にボタンとタイマーコントロールを置いて、こんな感じのことをしたのかなと仮定しちゃいます。

コード:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Timer1.Interval = 10000
Me.Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'// 処理A
'// 処理B
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Timer1.Stop()
End Sub


1.処理Aが終了し、かつ処理Bが始まる前のタイミングでボタンを押して、Timer1.stopする。
2.結果、処理Bが行われてるじゃん!(本当は行われてほしくない。)
3.しかし、再びタイマーにて処理ABが行われることはない。

この結果は自分としては正常ではないかと。その上で、簡単にやるならばこんな感じでしょうか。

コード:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Timer1.Interval = 10000
Me.Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'// 処理A
If Me.Timer1.Enabled = False Then Exit Sub
'// 処理B
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Timer1.Enabled = False
End Sub


もっと良いやり方があるかもしれないですが、今の状況で自分の言える範囲ではこんな感じです。

※追記
すみません、、VBでソースを作ってしまいましたorz

[ メッセージ編集済み 編集者: とーちゃん 編集日時 2008-10-04 17:45 ]
k’s
会議室デビュー日: 2008/10/04
投稿数: 7
投稿日時: 2008-10-06 00:44
コードとかも載せたほうがいいんですか以後気を付けます。

最終的に問題点はとーちゃんさんのアドバイスのおかげで解決することができました。
数少ない情報の中コードをくんでくださってありがとうございます。

そしてみなさんご教授ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)