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;