FileSystemWatcher - Created срабатывает больше одного раза - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Есть метод который выполняет копирование файла на удаленном *nix сервере из недоступной папки на шару (использую plink), потом выполняются необходимые действия с файлом и он удалятся. Проблема в том что при повторном выполнении событие Created срабатывает больше одного раза (2-й раз два раза, 3-й раз три раза и т.д.). Использование 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.

Решение задачи: «FileSystemWatcher - Created срабатывает больше одного раза»

textual
Листинг программы
FSWListIP.Created -= FSWListIP_Created;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы