- PR -

【C#】ファイルの監視とtimer起動について

1
投稿者投稿内容
松の陰
会議室デビュー日: 2005/11/05
投稿数: 11
投稿日時: 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 ]
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-07-14 16:22
引用:

松の陰さんの書き込み (2006-07-14 16:19) より:

ファイル変更によるchangeイベントの発生の際、
何故かtimer1.Start()という命令だけが無視されてしまうのです・・。


では、changeイベントで開始でなく、普通に timer1.start() させると、timer1_Tick()メソッドは実行されるのですね?
松の陰
会議室デビュー日: 2005/11/05
投稿数: 11
投稿日時: 2006-07-14 16:27
引用:

では、changeイベントで開始でなく、普通に timer1.start() させると、timer1_Tick()メソッドは実行されるのですね?


はい、そうです。
例えば下記のようにすれば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 ]
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2006-07-14 16:29
コード:

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.SynchronizingObject = this;
	fsw.Changed += new FileSystemEventHandler(this.fsw_Changed);
	fsw.EnableRaisingEvents = true;
}


松の陰
会議室デビュー日: 2005/11/05
投稿数: 11
投稿日時: 2006-07-14 16:40
>ya氏
ありがとうございます!
あっさり解決して申し訳ないくらいです・・・。

SynchronizingObjectで検索してみましたところこの@ITサイトが当該問題を指摘していのを簡単に見つけることができました、お恥ずかしい限りです><
同じような問題に直面した方のために一応リンクを張っておきます。



http://www.atmarkit.co.jp/fdotnet/dotnettips/287winfilewatch/winfilewatch.html
1

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