/// <summary>
        /// This is the main entry point for all the samples.   It runs them sequentially
        /// </summary>
        public static void Run()
        {
            // The model for EventSources is that any listeners that subscribe to an EventSource get the
            // messages.   This could be ETW, or the Windows EventLog or other EventListeners.   To demo
            // EventListeners, we  create an EventListener that also sends the logging messages to the console
            // and have ALL the demos send data there (as well as perhaps other places). 
            //
            // Note that eventListener do NOT die if they are unreferenced (because EventSources themselves
            // refer to them).   Thus you must explicitly Dispose an EventListener (e.g. a using statement) 
            // if you wish it to die.  
            using (var eventListener = new ConsoleEventListener())
            {
                MinimalEventSourceDemo.Run(); Debugger.Break();         // Break between demos, Hit F5 to continue. 
                CustomizedEventSourceDemo.Run(); Debugger.Break();
                EventLogEventSourceDemo.Run(); Debugger.Break();
                LocalizedEventSourceDemo.Run(); Debugger.Break();

                // We don't run LocalizedEventLogEventSourceDemo by default it will not produce
                // different results than the non-localized version unless you set your 
                // computer's culture to French.  If you are willing to do this (or change 
                // the demo to support a language you do care about), then you can enable it. 
                // LocalizedEventLogEventSourceDemo.Run(); Debugger.Break();
            }
        }
        private static void RunWorker()
        {
            // set current culture based on appDomain's friendly name
            var adCultureName = AppDomain.CurrentDomain.FriendlyName.Substring("workerDom_".Length);
            var culture = new CultureInfo(adCultureName);
            var savedUICulture = Thread.CurrentThread.CurrentUICulture;
            var savedCulture = Thread.CurrentThread.CurrentCulture;
            Thread.CurrentThread.CurrentUICulture = culture;
            Thread.CurrentThread.CurrentCulture = culture;

            Out.WriteLine("**** Test in UI culture = {0}", Thread.CurrentThread.CurrentUICulture);
            Out.WriteLine("Writing Events");
            // the new worker app domains need an event listener to display the events
            using (var el = new ConsoleEventListener())
            {
                int id = 0;
                foreach (var req in new string[] { "/home/index.aspx", "/home/catalog/121" })
                    DoRequest(req, ++id);
            }
            Out.WriteLine("Done Writing Events");

            // restore original culture
            Thread.CurrentThread.CurrentUICulture = savedUICulture;
            Thread.CurrentThread.CurrentCulture = savedCulture;
        }