FileSystemWatcher - Created срабатывает больше одного раза - C#
Формулировка задачи:
Доброго времени суток!
Есть метод который выполняет копирование файла на удаленном *nix сервере из недоступной папки на шару (использую plink), потом выполняются необходимые действия с файлом и он удалятся. Проблема в том что при повторном выполнении событие Created срабатывает больше одного раза (2-й раз два раза, 3-й раз три раза и т.д.). Использование FileSystemWatcher обусловлено тем что сервер удаленный и необходимо время на подключение к нему и копирование файла.
Подскажите как это исправить или может у кого есть идеи как обойтись без FileSystemWatcher.
private void btnSclsGetIp_Click(object sender, EventArgs e) { if (!(string.IsNullOrEmpty(lblSclsIpGm.Text))) { //Очищаем ChekedListBox for (int i = chlbSclsIp.Items.Count - 1; i >= 0; i--) chlbSclsIp.Items.RemoveAt(i); btnSclsGetIp.Text = "Ждем..."; btnSclsGetIp.Enabled = false; //Включаем мониторинг list.ip try { FSWListIP.Path = @"" + lblSclsIp.Text + @"\blabla\bla\blablabla"; FSWListIP.Filter = "list.ip"; FSWListIP.Created += FSWListIP_Created; FSWListIP.EnableRaisingEvents = true; //Копируем list.ip на шару try { ProcessStartPlink(@"-ssh -batch " + lblSclsIp.Text + " -l user -pw password cp /bla/bla/blabla/bla/bla/list.ip /bla/bla/bla/blabla/list.ip"); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Ошибка копирования", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } catch(Exception ex) { MessageBox.Show(ex.ToString(), "Ошибка доступа в папку blabla", MessageBoxButtons.OK, MessageBoxIcon.Error); btnSclsGetIp.Text = "GetIpList"; btnSclsGetIp.Enabled = true; FSWListIP.EnableRaisingEvents = false; return; } } else { MessageBox.Show("Ошибка!"); return; } }
private void FSWListIP_Created(object sender, FileSystemEventArgs e) { FSWListIP.EnableRaisingEvents = false; if (btnSclsGetIp.InvokeRequired) btnSclsGetIp.Invoke(new Action(() => { btnSclsGetIp.Text = "GetIpList"; btnSclsGetIp.Enabled = true; })); else { btnSclsGetIp.Text = "GetIpList"; btnSclsGetIp.Enabled = true; } //Парсим list.ip try { StreamReader sr = new StreamReader(@"" + lblSclsIp.Text + @"\blabla\blai\blablabla\list.ip"); while ((line = sr.ReadLine()) != null) { if (line.Contains("BLABLA")) { int indexStart = line.IndexOf('@'); int indexEnd = line.IndexOf('|'); string ipScales = line.Substring(indexStart + 1, indexEnd - indexStart - 1); if (chlbSclsIp.InvokeRequired) chlbSclsIp.Invoke(new Action(() => { chlbSclsIp.Items.Add(ipScales); })); else { chlbSclsIp.Items.Add(ipScales); } } } sr.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return; } //Удаляем list.txt try { ProcessStartPlink("-ssh -batch " + lblSclsIp.Text + " -l user -pw password rm /blabla/blablabla/bla/blablablabla/list.txt"); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Ошибка удаления", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } }
Решение задачи: «FileSystemWatcher - Created срабатывает больше одного раза»
textual
Листинг программы
FSWListIP.Created -= FSWListIP_Created;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д