Я создаю приложение для iPhone, которое получает данные из службы WCF, которую я пишу и размещаю.Я использую MonoTouch, чтобы написать клиент для iPhone.У меня есть таблица на одном из моих экранов, которая показывает список предметов (не более 100 предметов).Каждый из элементов имеет изображение для отображения в пользовательской ячейке.Чтобы избавиться от необходимости загружать все изображения вначале, я загружаю список элементов заранее, а затем запускаю поток, вызывающий службу для получения изображения каждой ячейки в методе GetCell.Как только изображение получено, я сохраняю его в словаре и извлекаю из него в следующий раз, когда ячейка отображается для сохранения при повторном вызове службы.Это означает, что изображение загружается только при необходимости, один раз из службы, а затем из словаря.Я использую код, подобный показанному в следующей статье:
http://simon.nureality.ca/simon-says-monotouch-downloading-images-like-appstore-app-in-less-than-50-lines-with-coreanimation-transitions/
Это хорошо работает в эмуляторе, но при развертывании его на тестовом устройстве (iPhone 4 на локальномWiFi) Я сталкиваюсь с некоторыми проблемами, которые, я надеюсь, кто-то может мне помочь.
Когда я загружаю список изначально, все хорошо.Когда я прокручиваю список вниз (быстро провожу пальцем вверх), устройство довольно сильно заикается.Похоже, что звонок в службу задерживает прокрутку.Я вынул код, который рисует результирующее изображение на ячейке, чтобы исключить это из рутины, так как я догадался, что это будет преступником, но это все еще цитата отстает.Я вызываю свой метод GetImage с помощью метода ThreadPool.QueueUserWorkItem и передаю ссылку на мой пользовательский контроллер ячеек, поэтому я ожидал, что вызов будет отправлен в другой поток, затем программа должна продолжить работу, не прерывая пользовательский интерфейс,но мне интересно, вызывает ли моя передача ссылки на контроллер ячейки проблемы с его виртуальным списком?
Во-вторых, если я быстро прокручиваю список вверх и вниз, чтобы сделать загрузку вызовови затем вернитесь к моему предыдущему экрану, чтобы изменить критерии списка, похоже, мне нужно подождать, пока существующие вызовы не будут возвращены, прежде чем я смогу сделать еще один на своей странице критериев - что занимает больше времени, чем мне бы хотелось.Есть ли способ отменить существующие вызовы, когда я ухожу от экрана, поскольку они больше не нужны?
Заранее благодарен за любую помощь.
Ал.