Как реализовать семантику Pause / Resume? - PullRequest
1 голос
/ 17 июня 2010

В приложении, которое я создаю, у меня есть два компонента, которые я хочу, чтобы пользователь мог приостановить / возобновить. Мне интересно, какие стандартные шаблоны могут существовать для поддержки приостановки и возобновления, если таковые имеются? Оба компонента выполняют много операций сетевого ввода-вывода. Похоже, что на высоком уровне я должен сохранить текущую очередь работы, которая есть у каждого компонента, - но это постоянное место, где я ищу эти стандартные шаблоны? Могу ли я сериализовать сам компонент? Я сериализирую только работу? В каком формате я сериализую (xml, база данных и т. Д.)? Что может помочь встроенное .NET? Есть ли библиотеки, чтобы помочь с этим? Есть ли какие-либо различия, которые следует учитывать, если пользователь просто приостанавливает / возобновляет работу в том же сеансе приложения или если он приостанавливает / возобновляет работу после открытия, закрытия и повторного открытия приложения? Как насчет сохранения этой информации на разных компьютерах?

Какие-нибудь предложения из прошлого опыта или моделей, которые приходят на ум? Я надеюсь, что это превращается в большее обсуждение различных способов сделать это и плюсы / минусы каждого. Спасибо.

Ответы [ 2 ]

1 голос
/ 17 июня 2010

Под очередью сообщений я имел в виду MSMQ или одного из его братьев.Все сообщения будут сохранены в некоторой базе данных и, следовательно, все еще доступны при перезапуске приложения.Основная цель таких очередей - обеспечить доставку сообщений, даже если связь прерывистая и / или ненадежная.

Похоже, вы могли бы заставить ваши коммуникационные компоненты работать с MSMQ вместо ваших текущих очередей довольно легко.

Если это не подходит вашему приложению, это, вероятно, так же просто, как сериализация объектов в существующих очередях по завершении и повторная десериализация их при запуске приложения.Если важно пережить неожиданное завершение, вы всегда должны сериализовать объект при его добавлении в рабочую очередь, но в этот момент вам может потребоваться снова посмотреть на существующую систему очереди сообщений.

0 голосов
/ 17 июня 2010

Вы можете реализовать многопоточность и просто вызывать функции Suspend () и Resume () в потоке соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...