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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2012, 04:02   #1
Tolias
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 41
По умолчанию Подписаться на событие другого приложения

Есть два C#-приложения, которые находятся в одном каталоге. Первое приложение периодически записывает данные в файл sensors.bin. Мне нужно сделать так, чтобы другая программа сразу об том узнавала и прочитывала этот измененный файл. Подскажите пожалуйста, как можно это сделать.

P.S. Я сперва думал использовать для этой цели FileSystemWatcher, но он меня глубоко разочаровал своей ненадежностью - не всегда срабатывает, и к тому же почему-то реагирует на изменный файл дважды.

P.P.S. Данные мне нужно передавать обязательно через файл на диске. Таково условие задачи...
Tolias вне форума Ответить с цитированием
Старый 06.03.2012, 10:04   #2
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Если они оба ваши то wcf, com, Namepipes или иные механизмы межпроцессорного взаимодействия. Можете хоть в заголовке одного окна дописывать тех информцию, а другой программулиной монеторить изменеия. Можно монеторить измения файла. если через 3-ри тика таймера размер файла не изменился и отличается от предыдущего значния то можно читать.
Вот...
Guy вне форума Ответить с цитированием
Старый 06.03.2012, 18:13   #3
Tolias
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 41
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
Можно монеторить измения файла. если через 3-ри тика таймера размер файла не изменился и отличается от предыдущего значния то можно читать.
Вот...
ну такой вариант изначально мне не понравился. Это лишняя трата процессорного времени. Ведь чтобы таким не заниматься, для этого же предназначены события


Цитата:
Если они оба ваши то wcf, com, Namepipes или иные механизмы межпроцессорного взаимодействия. Можете хоть в заголовке одного окна дописывать тех информцию, а другой программулиной монеторить изменеия.
ну так в том то и дело, что если под выражением "монеторить изменеия" вы имеете в виду таймером периодически опрашивать переменную, это та же самая безумная трата процессорного времени (хоть и намного меньшая, чем опрос файла на диске).
А там с помощью выще названных технологий можно как-то узнавать об изменении переменной путем события, а не постоянного мониторинга?
Tolias вне форума Ответить с цитированием
Старый 07.03.2012, 09:17   #4
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Чего то ты приувеличиваешь. ПРоверить размер файла раз в 5 секунд ничтожно мало заберёт процессорного времени, если ты хэшь проверять не хочешь файла.

WCF NamedPipes тоже придётся делать по принцепу "Пинга".
Guy вне форума Ответить с цитированием
Старый 07.03.2012, 13:19   #5
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Цитата:
Можно монеторить измения файла. если через 3-ри тика таймера размер файла не изменился и отличается от предыдущего значния то можно читать.
FileSystemWatcher я так понимаю нынче не в моде?

Код:
... {
...

string nameFile = "file.txt";
dd = new DirectoryInfo(nameFile);
FileSystemWatcher watcher = new FileSystemWatcher(dd.Parent.FullName);
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess;
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Filter = dd.Name;
watcher.EnableRaisingEvents = true;
...
}
private void OnChanged(object source, FileSystemEventArgs e)
{
      MessageBox.Show("Паника! Паника! Что-то в файле изменилось!");
}
...
^-.-^ My GitHub

Последний раз редактировалось Fenex; 07.03.2012 в 13:25.
Fenex вне форума Ответить с цитированием
Старый 07.03.2012, 17:37   #6
Tolias
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 41
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
Чего то ты приувеличиваешь. ПРоверить размер файла раз в 5 секунд ничтожно мало заберёт процессорного времени, если ты хэшь проверять не хочешь файла.

WCF NamedPipes тоже придётся делать по принцепу "Пинга".
Ну да, 5 секунд некритично.. Но дело в том, что первая программа может 3 раза в секунду изменить файл, а может и раз в 5 минут это сделать. И вторая программа должна отловить абсолютно все изменения ни единого не упустив. Это критично для моей задачи. Ну и думаю вы сами понимаете, что если вторая программа будет лишь раз в 5 секунд проверять, а первая программа за эти 5 секунд успела изменить файл хотя бы дважды...

Цитата:
WCF NamedPipes тоже придётся делать по принцепу "Пинга".
Ну вот потому я и приостановил изучение сего и решил переспросить на форумах может какое-то лучшее решение есть, чтобы не "пинговать"

Цитата:
Сообщение от Fenex Посмотреть сообщение
FileSystemWatcher я так понимаю нынче не в моде?
Читать первый пост темы вижу тоже нынче не в моде
Цитата:
Сообщение от Tolias Посмотреть сообщение
P.S. Я сперва думал использовать для этой цели FileSystemWatcher, но он меня глубоко разочаровал своей ненадежностью - не всегда срабатывает, и к тому же почему-то реагирует на изменный файл дважды.
хочу только добавить, что с двойным срабатыванием я проблему уже решил написанием костыля. Ну а вот проблема с непостоянным срабатыванием при изменении файла иногда имеет место быть. А мне нужно, чтобы программа во всех 100% случаев срабатывала.
Tolias вне форума Ответить с цитированием
Старый 07.03.2012, 17:59   #7
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Цитата:
Ну а вот проблема с непостоянным срабатыванием при изменении файла иногда имеет место быть. А мне нужно, чтобы программа во всех 100% случаев срабатывала.
Должна быть причина столь странного поведения. Надо её только понять...
У меня срабатывает всегда.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подписаться на событие загруженной Assembly Ustim C# (си шарп) 3 15.06.2011 01:51
Работа с компонентом другого приложения russian-stalker Общие вопросы Delphi 2 05.01.2011 22:18
Подписаться на событие другого класса boris-blade Общие вопросы .NET 1 06.04.2010 22:53
Запуск другого приложения Sparky Общие вопросы по Java, Java SE, Kotlin 3 18.10.2009 11:03
Вызов одного приложения из другого zalum Общие вопросы Delphi 8 24.04.2009 10:05