protected async override void OnAppearing() { base.OnAppearing(); TokenSource = new CancellationTokenSource(); Token = TokenSource.Token; var UpdateTask = new Task(async() => { try { while (!Token.IsCancellationRequested) { await Task.Delay(TimeSpan.FromSeconds(2)); var update = await _server.GetRequestsDetailListTech(Settings.Person.Phone, GetLastIdMessage()); if (update.Error == null) { //Settings.DateUniq = ""; foreach (var each in update.Messages) { if (!messages.Contains(each)) { //Device.BeginInvokeOnMainThread(() => messages.Add(each)); Device.BeginInvokeOnMainThread(async() => { addAppMessage(each, messages.Count > 1 ? messages[messages.Count - 2].AuthorName : null); var lastChild = baseForApp.Children.LastOrDefault(); if (lastChild != null) { // Device.BeginInvokeOnMainThread(async () => //await scrollFroAppMessages.ScrollToAsync(lastChild.X, lastChild.Y + 30, true) //); await scrollFroAppMessages.ScrollToAsync(lastChild.X, lastChild.Y + 30, false); //await scrollFroAppMessages.ScrollToAsync(lastChild, ScrollToPosition.End, // false); } }); } request.Messages.Add(each); } //Device.BeginInvokeOnMainThread(() => additionalList.ScrollTo(messages[messages.Count - 1], 0, true)); } } } catch (Exception e) { } }, Token); try { UpdateTask.Start(); } catch { } await Task.Delay(TimeSpan.FromSeconds(1)); if (Device.RuntimePlatform == "Android") { return; try { if (!PermissionAsked) { var camera_perm = await Plugin.Permissions.CrossPermissions.Current.CheckPermissionStatusAsync(Permission .Camera); if (camera_perm != PermissionStatus.Granted) { await CrossPermissions.Current.RequestPermissionsAsync(Permission.Camera, Permission.Storage); } } } catch { } finally { PermissionAsked = true; } } }