Страница: 1 | 2 |
Вопрос: Обмен данными между приложениями
Добавлено: 11.11.08 17:56
Автор вопроса: Legon
Здравствуйте. У меня вопрос:
В контекстное меню проводника Windows я встроил меню для вызова моей программы с передачей ей полного пути файла или папки для последующей обработки (копирования/перемещения). НО!, при выборе нескольких файлов, на каждый из них создается отдельный инстанс моей программы, что не есть хорошо, так как при множестве файлов будет жуткая нагрузка на винчестер и всю систему.
Хочеться реализовать программу по типу Winamp'a: Каждый интсанс отлавливает предидущий и если такой присутствует - передает ему параметры своей командной строки и закрывается. А главный (первый) инстанс создает список команд-файлов и обрабатывает их по очереди, желательно в отдельном потоке. Желательно, чтобы второй поток информировал главный поток о статусе операции.
Итог:
1. Как реализовать обмен данными?
2. (по-возможности) Как эффективно "добавлять" задания для выполнения? (ставить файлы в очередь на обработку в другой поток)
3. (по возможности) С помощью каких "технологий" создать поток создать поток (BackgroundWorker, Thread, ThreadSpool и т.д.), который бы информировал главный поток и изменял свойства видимых котнтролов?
Заранее спасибо!
Ответы
Всего ответов: 25
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 11.11.08 18:04
1. Мутексы, семафоры, окна (сообщения)
2. Пул потоков.
3. Хз, я не дотнетчик. Я бы юзал потоки.
Номер ответа: 2
Автор ответа:
Legon
Вопросов: 4
Ответов: 32
Профиль | | #2
Добавлено: 11.11.08 18:24
Извини, но мне это ничего не сказало.
Не подходит, так как мне нужно, чтобы поток был один (помимо основного). Главный поток, получая данные из другого приложения, должен обновлять список файлов в дочернем потоке, не прерывая его. То биш, дописывая пути новых файлов в конец "списка".
Номер ответа: 3
Автор ответа:
Legon
Вопросов: 4
Ответов: 32
Профиль | | #3
Добавлено: 11.11.08 18:41
В принципе, два последних вопроса можно снять. Вся информация храниться в главном потоке, который на каждый файл будет запускать поток по очереди: поток закончил выполнение - запускаем следующий и т.д.
Осталось только решить, как передавать данные между приложениями.
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 11.11.08 20:28
http://www.codeproject.com/KB/books/WinForms20Programng.aspx
Номер ответа: 5
Автор ответа:
lanbob
Вопросов: 0
Ответов: 1
Профиль | | #5
Добавлено: 11.11.08 21:41
не пробовал рассмотреть вариант с постановкой заданий в очередь.
Номер ответа: 6
Автор ответа:
Legon
Вопросов: 4
Ответов: 32
Профиль | | #6
Добавлено: 11.11.08 22:17
Номер ответа: 7
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #7
Добавлено: 12.11.08 00:37
Пишешь в массив имена файлов, при завершении обработки одного файла - пихаешь следующий. Что может быть проще?
Номер ответа: 8
Автор ответа:
Legon
Вопросов: 4
Ответов: 32
Профиль | | #8
Добавлено: 12.11.08 01:05
А вот КАК получить эти имена файлов с другого приложения???
Номер ответа: 9
Автор ответа:
Legon
Вопросов: 4
Ответов: 32
Профиль | | #9
Добавлено: 12.11.08 01:07
Номер ответа: 10
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #10
Добавлено: 12.11.08 01:26
кури MSDN. ищи synchronization overview
Номер ответа: 11
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #11
Добавлено: 12.11.08 01:26
Я бы приер тебе накатал, но на дотнете не пишу
Номер ответа: 12
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #12
Добавлено: 13.11.08 14:49
Вот пример нацарапал.
Если есть вопросы - готов ответить.
Номер ответа: 13
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #13
Добавлено: 13.11.08 14:49
PS Eros - Привет!
Номер ответа: 14
Автор ответа:
Legon
Вопросов: 4
Ответов: 32
Профиль | | #14
Добавлено: 13.11.08 22:32
Извините за долгую молчанку. Был на работе.
Steel Brand
Спасибо за листинг! Попробовал, ничего не заработало (допускаю, что не до конца все дооформил), но возникло еще больше вопросов чем было. Может по возможности стукнешь в АСЮ, если не затруднит? ICQ: 463103311
Номер ответа: 15
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #15
Добавлено: 13.11.08 23:04
Вот пример использования класса.
Метод ProcessFile - заглушка, в моем случае она просто делает вывод в консоль и небольшую задержку, имитирующую долгий процес. В этом месте вам нужно вставить код обработки файла.
Впрочем если у вас есть еще вопросы, вы можете их здесь задать или же написать мне в ICQ.