前提・実現したいこと
FileSystemWatcherによってファイルが変更されたことを感知した時、そのデータをDBに書き込んだ後、DBからデータを取得してDataGridViewで表示する処理を作成しています。
本プログラムは1人以上10人以下が同時に起動しています。
その際、起動している全員が同時にファイルの変更を感知し、DBに書き込むことで、同一のレコードが起動している人数分だけ複製されてしまいます。
そこで、変更の感知後、先着1名がDBを更新し、残りの人はDBの更新を待機する処理を実装したいです。
該当のソースコード
C#
1private FileSystemWatcher _watcher = new FileSystemWatcher(); 2public WatchForm() 3{ 4 InitializeComponent(); 5 6 // フォームが呼び出されたとき、フォルダの監視を開始する 7 _watcher.Path = Properties.Resources.Folder; 8 _watcher.Filter = "*.csv" 9 _watcher.IncludeSubdirectories = true; 10 _watcher.NotifyFilter = (NotifyFilters.FileName | NotifyFilters.CreationTime | NotifyFilters.LastWrite); 11 _watcher.Created += new FileSystemEventHandler(OnResultChanged); 12 _watcher.Changed += new FileSystemEventHandler(OnResultChanged); 13 _watcher.Deleted += new FileSystemEventHandler(OnResultChanged); 14 _watcher.EnableRaisingEvents = true; 15} 16 17private void OnResultChanged(object sender, FileSystemEventArgs eventArgs) 18{ 19 // 更新権限を持つ人なら 20 if(HasReloadAuthority()) 21 { 22 // ファイルを読み取り、DBに書き込む 23 Program.DataBaseReload(); 24 } 25 else 26 { 27 // 更新権限を持つ人が更新を完了するまで待つ 28 Wait() 29 } 30 31 // フォームをリロードする(DBからデータを取得し、DataGridViewを更新する) 32 WatchForm_Load(sender, eventArgs); 33} 34 35private bool HasReloadAuthority() 36{ 37 // 先着1名のみ更新権限を持たせる処理 38}
補足情報(FW/ツールのバージョンなど)
.NET Framework 4.6.1
Windows アプリケーション
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/13 07:27
退会済みユーザー
2021/01/13 07:29 編集
2021/01/13 07:34