示例#1
0
        internal void HandleLongPress(TouchEffect sender)
        {
            if (sender.State == TouchState.Normal)
            {
                longPressTokenSource?.Cancel();
                longPressTokenSource?.Dispose();
                longPressTokenSource = null;
                return;
            }

            if (sender.LongPressCommand == null || sender.InteractionStatus == TouchInteractionStatus.Completed)
            {
                return;
            }

            longPressTokenSource = new CancellationTokenSource();
            Task.Delay(sender.LongPressDuration, longPressTokenSource.Token).ContinueWith(t =>
            {
                if (t.IsFaulted && t.Exception != null)
                {
                    throw t.Exception;
                }

                if (t.IsCanceled)
                {
                    return;
                }

                var longPressAction = new Action(() =>
                {
                    sender.HandleUserInteraction(TouchInteractionStatus.Completed);
                    sender.RaiseLongPressCompleted();
                });

                if (Device.IsInvokeRequired)
                {
                    Device.BeginInvokeOnMainThread(longPressAction);
                }
                else
                {
                    longPressAction.Invoke();
                }
            });
        }