Это вопрос о лучших практиках, о которых я думаю, но он применим непосредственно к моему текущему проекту MT.Monotouch threads, GC, WCF
Я использую службы WCF для связи с сервером.
Для этого я сделать следующее:
services.MethodToCall(params);
и асинхронная:
services.OnMethodToCallCompleted += delegate{
//do stuff and ting
};
Это может привести к проблемам, если вы не будете осторожны в том, что переменные, определенные в сферу действия асинхронный обратный вызов иногда может быть очищен gc, и это может привести к сбоям.
Так что я делаю это практикой, чтобы объявить их за пределами области обратного вызова, если я не уверен, что они не нужны.
Теперь - при выполнении каких-либо действий и ting подразумевается изменение ui - i, завершающего все это вызовом InvokeOnMainThread. Я предполагаю, что обертывание всего в этом замедлит основной поток вниз и затирает точку с несколькими потоками.
Несмотря на то, что я все время забочусь обо всем этом, у меня все еще возникают сбои, и я понятия не имею, почему!
Я уверен, что это имеет какое-то отношение к темам, сфере охвата и тому подобное.
Теперь - единственное, что я могу думать о внешнем обновлении пользовательского интерфейса, который может понадобиться внутри InvokeOnMainThread, заключается в том, что у меня есть одноэлементный класс «База данных». Это основано на коде версии 5 из этой темы http://www.yoda.arachsys.com/csharp/singleton.html
Итак, теперь, если метод службы возвращает данные, которые необходимо добавить/обновить в класс базы данных - я также обернул это внутри вызова InvokeOnMainThread.
По-прежнему возникают случайные сбои.
Итак ... Мой вопрос заключается в следующем:
Я новичок в толстом клиенте разработчика - Иду с точки зрения веб-Дев, где нам не нужно беспокоиться о потоках так много :)
Помимо того, что я упомянул, есть ли другие вещи, о которых я должен знать?
Правильно ли это указано? Или мне что-то не хватает?
Приветствия
ш: //
Уэйн, можете ли вы дать больше контекста, больше кода? в общем, то, что вы делаете, прекрасно, так что было бы хорошо увидеть полный образец. вы создали реестр? –
Оказалось, что я отклонил модальный вид из контекстного модального вида: this.dismissmodalviewcontroller(); Теперь это обычно не проблема, за исключением того, что перед этим я запускал событие: ModalViewDismissing(); В тех случаях, когда это событие прослушивалось - возникла проблема. Все хорошо сейчас :) – iwayneo