Я только что написал о том, что я называю TriggeredQueue. Это вдохновило ответ Марка Гравелла.
Мой пост можно найти здесь: http://joesauve.com/triggeredqueuet
И суть здесь: http://gist.github.com/jsauve/b2e8496172fdabd370c4
Это имеет четыре события:
- WillEnqueue
- WillDequeue
- DidEnqueue
- DidDequeue
Вы можете подключиться к любому из них следующим образом:
YourQueue.WillEnqueue += (sender, e) => {
// kick off some process
};
YourQueue.DidEnqueue += (sender, e) => {
// kick off some process
// e.Item provides access to the enqueued item, if you like
};
YourQueue.WillDequeue += (sender, e) => {
// kick off some process
};
YourQueue.DidDequeue += (sender, e) => {
// kick off some process
// e.Item provides access to the dequeued item, if you like
};
Одним из хитрых приемов является то, что вы можете использовать метод DidDequeue, чтобы запустить какой-то процесс, чтобы убедиться, что очередь заполнена, сделав веб-запрос или загрузив некоторые данные из файловой системы и т. Д. Я использую этот класс в мобильных приложениях Xamarin, чтобы убедитесь, что данные и изображения предварительно кэшируются для обеспечения бесперебойного взаимодействия с пользователем, вместо того, чтобы загружать изображения ПОСЛЕ того, как они прокручиваются на экран (как вы можете видеть в Facebook и бесчисленном количестве других приложений).