public static void PlayStoryCallback(Object param)
        {
            Object[] paramObj     = param as Object[];
            Story    story        = paramObj[0] as Story;
            int      startSegment = (int)paramObj[1];

            if (activeStory == null)
            {
                activeStory                = story;
                resetEvent                 = new ManualResetEvent(false);
                story.State                = new StoryState(resetEvent);
                story.State.StoryPaused    = false;
                story.State.CurrentSegment = startSegment;
                if (!string.IsNullOrEmpty(story.Name) || story.LocalStory)
                {
                    try
                    {
                        do
                        {
                            if (!story.LocalStory)
                            {
                                Messenger.SendUpdateSegment(story.State.CurrentSegment);
                            }
                            ISegment segment     = story.Segments[story.State.CurrentSegment];
                            ISegment nextSegment = GetNextSegment(story, story.State.CurrentSegment);
                            story.State.NextSegment = nextSegment;
                            if (segment != null)
                            {
                                segment.Process(story.State);
                            }
                            story.State.CurrentSegment++;
                        } while (story.State.CurrentSegment < story.Segments.Count);
                    }
                    catch (Exception ex)
                    {
                        SdlDotNet.Widgets.MessageBox.Show(ex.ToString(), "Error!");
                    }
                }
                if (!story.LocalStory)
                {
                    Messenger.SendChapterComplete();
                }
                Menus.MenuSwitcher.CloseAllMenus();
                activeStory = null;
            }
        }