Мы создали задачу для получения информации о программе с сервера и обработки данных.Как только обработка данных завершена, задача уведомляется путем установки поля ответа, и экран получает уведомление, когда оно зарегистрировано в наблюдаемом поле для ответа, как показано ниже.
Экран:
m.FetchSchedule = CreateObject("roSGNode", "FetchScheduleData")
m.FetchSchedule.scheduleRequestContent = channels
m.FetchSchedule.observeField("scheduleContent", "didReceiveInitialScheduleData")
m.FetchSchedule.control = "RUN"
Функция наблюдателя на экране:
sub didReceiveInitialScheduleData()
if m.FetchSchedule.scheduleContent <> invalid and m.FetchSchedule.scheduleContent.getChildCount() > 0 and m.FetchSchedule.totalRows > 0
? "GuideScreen.brs - [didReceiveInitialScheduleData]"
end if
end sub
Это прекрасно работает без каких-либо проблем для одной задачи. Но нам нужно получитьпрограммная информация каналов всех категорий.Теперь мы делаем это последовательно, значит, как только задача завершена для одной категории, мы создаем другую задачу для другой категории. Это работает нормально, но это занимает время, поскольку мы делаем это последовательно.
Чтобы уменьшить задержку, мы пытаемся создать по одной задаче для каждой категории и пытаемся запускаться одновременно.Но не может придумать, как изменить функцию наблюдателя.
Код для создания нескольких задач на экране:
for x = 0 to m.global.AllNeighborhood.count() - 1
m.FetchSchedule[x] = CreateObject("roSGNode", "FetchScheduleData")
m.FetchSchedule[x].scheduleRequestContent = channels
m.FetchSchedule[x].categoryIndex = x
m.FetchSchedule[x].observeField("scheduleContent", "didReceiveInitialScheduleData")
m.FetchSchedule[x].control = "RUN"
end for
Мы передаем индекс потока как 'categoryIndex».Но не удалось изменить функцию наблюдателя "didReceiveInitialScheduleData".Потому что нам нужен индекс из функции наблюдателя для доступа к ответу.Хотя мы сохраняем индекс как «categoryIndex», даже для доступа к нему нам нужен индекс.Мы застряли здесь.
Может кто-нибудь, пожалуйста, сообщите нам, возможно ли создать несколько задач с одной и той же функцией наблюдателя.Если возможно, как мы можем узнать, из какого потока мы получили ответ.Если это невозможно, есть ли способ решить эту проблему.