Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2011, 18:59   #1
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию Двойное срабатывание FileSystemWatcher

все привет, подскажите пожалуйста в чем проблема:
при изменении в файле, программа отсылает в скайп содержимое измененного файла.
проблема в том, что по непонятным причинам программа отсылает ДВАЖДЫ содержимое файла.. тогда как изменение произошло всего один раз.

подскажите в чем моя ошибка?
Код:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using SKYPE4COMLib;


namespace SK
{
    public partial class FG : Form
    {
        #region Переменные

        private readonly ManualResetEvent _instanse1 = new ManualResetEvent(false);
        string puth = "C:\\files";
        string flnm = "ts.txt";
        string fullnm = "C:\\files\\ts.txt";
        #endregion

        #region Инициализация

        public FG()
        {
            InitializeComponent();
            Watchers();
        }

        #endregion

        #region Watchers
        public void Watchers()
        {
            var watcher1 = new FileSystemWatcher(puth, flnm)
            {
                NotifyFilter = NotifyFilters.LastWrite,
                EnableRaisingEvents = true
            };
            watcher1.Changed += OnChanged1;

        }
        private static string ChangeInFile(string path)
        {
            var buffer = new byte[255];

            using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                if (fs.CanRead)
                    fs.Read(buffer, 0, buffer.Length);
            }

            return Encoding.ASCII.GetString(buffer);
        }
        #endregion

        #region Обработчик события изменения файла
       
        public void OnChanged1(object source, FileSystemEventArgs e)
        {
            _instanse1.WaitOne(50);
            string stroka = ChangeInFile(fullnm);
            Skype skype = new Skype();
            skype.SendMessage(textBox1.Text, stroka);

        }
        #endregion

        private void button1_Click(object sender, EventArgs e)
        {
        }

    }
}
ShamanK вне форума Ответить с цитированием
Старый 06.11.2011, 19:32   #2
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию

добавил следующее:

Код:
            if (str != stroka)
            {
                Skype skype = new Skype();
                skype.SendMessage(textBox1.Text, stroka);
                str = stroka;
            }
тоесть банальное сравнение строк - если они одинаковы то сообщение не отсылается..
но наверняка есть более элегантное решение?
ShamanK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое срабатывание ссылки DamianTrash HTML и CSS 3 13.05.2011 12:33
Модуль мониторинга файловой системы (FileSystemWatcher) maxefficiently Помощь студентам 2 15.02.2011 06:49
Срабатывание функции только для потомка Gonzo JavaScript, Ajax 1 01.10.2010 20:12
Срабатывание разрешением в микросекунды notHaker Win Api 7 22.07.2010 02:11
Срабатывание датчика по таймеру RockForr Общие вопросы Delphi 8 26.05.2009 16:32