- - PR -
【C#】ファイルの監視とtimer起動について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-07-14 16:19
とあるファイルをFileSystemWatcherにより監視して、
そのファイルに変更があった場合 System.Windows.Forms.Timerを起動する、といったプログラムを 作成中なのですが不明な問題が発生してしまいます。 ファイル変更によるchangeイベントの発生の際、 何故かtimer1.Start()という命令だけが無視されてしまうのです・・。 FileSystemWatcherの情報の書かれたサイトをいくつか拝見しましたが 問題解決に至りませんでした。 申し訳ありませんが何か知ってらっしゃる方がいらっしゃいましたら ご教授お願いします。 以下ソースの簡単な内容です。 private void Form1_Load(object sender, System.EventArgs e) { //このような設定で監視スタート FileSystemWatcher fsw = new FileSystemWatcher() ; fsw.Path = Path.GetDirectoryName(@"C:\***\test.txt") ; fsw.NotifyFilter = NotifyFilters.LastWrite ; fsw.Changed += new FileSystemEventHandler(this.fsw_Changed) ; fsw.EnableRaisingEvents = true ; } private void fileSystemWatcher1_Changed(object sender,System.IO.FileSystemEventArgs e) { //ファイル情報に変更があるとここのイベントが発生する。 //他の命令は実行されますがタイマー起動だけは実行されません。 timer1.Start(); } private void timer1_Tick(object sender, System.EventArgs e) { //当然ここの命令は実行されません。 } [ メッセージ編集済み 編集者: 松の陰 編集日時 2006-07-14 16:23 ] | ||||
|
投稿日時: 2006-07-14 16:22
では、changeイベントで開始でなく、普通に timer1.start() させると、timer1_Tick()メソッドは実行されるのですね? | ||||
|
投稿日時: 2006-07-14 16:27
はい、そうです。 例えば下記のようにすればtimer1は問題なく起動します。 private void Form1_Load(object sender, System.EventArgs e) { timer1.Start(); } private void timer1_Tick(object sender, System.EventArgs e) { //これなら何の問題もなくここの命令は実行されます。 } [ メッセージ編集済み 編集者: 松の陰 編集日時 2006-07-14 16:28 ] | ||||
|
投稿日時: 2006-07-14 16:29
| ||||
|
投稿日時: 2006-07-14 16:40
>ya氏
ありがとうございます! あっさり解決して申し訳ないくらいです・・・。 SynchronizingObjectで検索してみましたところこの@ITサイトが当該問題を指摘していのを簡単に見つけることができました、お恥ずかしい限りです>< 同じような問題に直面した方のために一応リンクを張っておきます。 http://www.atmarkit.co.jp/fdotnet/dotnettips/287winfilewatch/winfilewatch.html |
1