Ejemplo n.º 1
0
        public void ShowStage(HelpStage stage)
        {
            //Abandon must have already been called
            if (_help == null)
            {
                return;
            }

            if (HostControl.InvokeRequired)
            {
                HostControl.Invoke(new MethodInvoker(() => ShowStage(stage)));
                return;
            }

            CurrentStage = stage;

            var helpBox = _help.ShowStage(this, CurrentStage);

            helpBox.OptionTaken += () => ShowStage(CurrentStage.OptionDestination);

            var t = stage.Await(_cancellationTokenSource.Token);

            t.ContinueWith(r =>
            {
                if (r.IsFaulted || r.IsCanceled)
                {
                    Abandon();
                }
                else
                {
                    try
                    {
                        if (r.Result)
                        {
                            ShowNextStageOrClose();
                        }
                    }
                    catch (Exception)
                    {
                        Abandon();
                    }
                }
            });
        }