private void ConfigureWorkflowApplication(WorkflowApplication wfApp)
        {
            // Configure the persistence store.
            wfApp.InstanceStore = store;

            // Add a StringWriter to the extensions. This captures the output
            // from the WriteLine activities so we can display it in the form.
            StringWriter sw = new StringWriter();

            wfApp.Extensions.Add(sw);

            // Add the custom tracking participant with a tracking profile
            // that only emits tracking records for WriteLine activities.
            StatusTrackingParticipant stp = new StatusTrackingParticipant
            {
                TrackingProfile = new TrackingProfile
                {
                    Queries =
                    {
                        new ActivityStateQuery
                        {
                            ActivityName = "WriteLine",
                            States       = { ActivityStates.Executing },
                            Arguments    = { "Text"                   }
                        }
                    }
                }
            };

            wfApp.Extensions.Add(stp);

            wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
            {
                if (e.CompletionState == ActivityInstanceState.Faulted)
                {
                    UpdateStatus(string.Format("Workflow Terminated. Exception: {0}\r\n{1}",
                                               e.TerminationException.GetType().FullName,
                                               e.TerminationException.Message));
                }
                else if (e.CompletionState == ActivityInstanceState.Canceled)
                {
                    UpdateStatus("Workflow Canceled.");
                }
                else
                {
                    int Turns = Convert.ToInt32(e.Outputs["Turns"]);
                    UpdateStatus(string.Format("Congratulations, you guessed the number in {0} turns.", Turns));
                }
                GameOver();
            };

            wfApp.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
            {
                UpdateStatus(string.Format("Workflow Aborted. Exception: {0}\r\n{1}",
                                           e.Reason.GetType().FullName,
                                           e.Reason.Message));
            };

            wfApp.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
            {
                UpdateStatus(string.Format("Unhandled Exception: {0}\r\n{1}",
                                           e.UnhandledException.GetType().FullName,
                                           e.UnhandledException.Message));
                GameOver();
                return(UnhandledExceptionAction.Terminate);
            };

            wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
            {
                // Send the current WriteLine outputs to the status window.
                var writers = e.GetInstanceExtensions <StringWriter>();
                foreach (var writer in writers)
                {
                    UpdateStatus(writer.ToString());
                }
                return(PersistableIdleAction.Unload);
            };
        }
        private void ConfigureWorkflowApplication(WorkflowApplication wfApp)
        {
            // Configure the persistence store.
            wfApp.InstanceStore = store;

            // Add a StringWriter to the extensions. This captures the output
            // from the WriteLine activities so we can display it in the form.
            StringWriter sw = new StringWriter();
            wfApp.Extensions.Add(sw);

            // Add the custom tracking participant with a tracking profile
            // that only emits tracking records for WriteLine activities.
            StatusTrackingParticipant stp = new StatusTrackingParticipant
            {
                TrackingProfile = new TrackingProfile
                {
                    Queries =
                    {
                        new ActivityStateQuery
                        {
                            ActivityName = "WriteLine",
                            States = { ActivityStates.Executing },
                            Arguments = { "Text" }
                        }
                    }
                }
            };
            wfApp.Extensions.Add(stp);

            wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
            {
                if (e.CompletionState == ActivityInstanceState.Faulted)
                {
                    UpdateStatus(string.Format("Workflow Terminated. Exception: {0}\r\n{1}",
                        e.TerminationException.GetType().FullName,
                        e.TerminationException.Message));
                }
                else if (e.CompletionState == ActivityInstanceState.Canceled)
                {
                    UpdateStatus("Workflow Canceled.");
                }
                else
                {
                    int Turns = Convert.ToInt32(e.Outputs["Turns"]);
                    UpdateStatus(string.Format("Congratulations, you guessed the number in {0} turns.", Turns));
                }
                GameOver();
            };

            wfApp.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
            {
                UpdateStatus(string.Format("Workflow Aborted. Exception: {0}\r\n{1}",
                        e.Reason.GetType().FullName,
                        e.Reason.Message));
            };

            wfApp.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
            {
                UpdateStatus(string.Format("Unhandled Exception: {0}\r\n{1}",
                        e.UnhandledException.GetType().FullName,
                        e.UnhandledException.Message));
                GameOver();
                return UnhandledExceptionAction.Terminate;
            };

            wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
            {
                // Send the current WriteLine outputs to the status window.
                var writers = e.GetInstanceExtensions<StringWriter>();
                foreach (var writer in writers)
                {
                    UpdateStatus(writer.ToString());
                }
                return PersistableIdleAction.Unload;
            };
        }