Summary description for GarbageCollection.
        static void Main(string[] args)
        {
            if (!ProcessArguments(args))
            {
                return;
            }

            // Initialize critical member variables.
            m_iObjsInUse     = 0;
            m_iServerLocks   = 0;
            m_uiMainThreadId = GetCurrentThreadId();

            // Register the SimpleCOMObjectClassFactory.
            SimpleCOMObjectClassFactory factory = new SimpleCOMObjectClassFactory();

            factory.ClassContext = (uint)CLSCTX.CLSCTX_LOCAL_SERVER;
            factory.ClassId      = Marshal.GenerateGuidForType(typeof(XApiCom));
            factory.Flags        = (uint)REGCLS.REGCLS_MULTIPLEUSE | (uint)REGCLS.REGCLS_SUSPENDED;
            factory.RegisterClassObject();
            ClassFactoryBase.ResumeClassObjects();

            // Start up the garbage collection thread.
            GarbageCollection GarbageCollector        = new GarbageCollection(10000);
            Thread            GarbageCollectionThread = new Thread(new ThreadStart(GarbageCollector.GCWatch));

            // Set the name of the thread object.
            GarbageCollectionThread.Name = "Garbage Collection Thread";
            // Start the thread.
            GarbageCollectionThread.Start();

            // Start the message loop.
            MSG    msg;
            IntPtr null_hwnd = new IntPtr(0);

            while (GetMessage(out msg, null_hwnd, 0, 0) != false)
            {
                TranslateMessage(ref msg);
                DispatchMessage(ref msg);
            }
            Console.WriteLine("Out of message loop.");

            // Revoke the class factory immediately.
            // Don't wait until the thread has stopped before
            // we perform revokation.
            factory.RevokeClassObject();
            Console.WriteLine("SimpleCOMObjectClassFactory Revoked.");

            // Now stop the Garbage Collector thread.
            GarbageCollector.StopThread();
            GarbageCollector.WaitForThreadToStop();
            Console.WriteLine("GarbageCollector thread stopped.");

            // Just an indication that this COM EXE Server is stopped.
            Console.WriteLine("Press [ENTER] to exit.");
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            if (!ProcessArguments(args))
            {
                return;
            }

            // Initialize critical member variables.
            m_iObjsInUse = 0;
            m_iServerLocks = 0;
            m_uiMainThreadId = GetCurrentThreadId();

            // Register the SimpleCOMObjectClassFactory.
            SimpleCOMObjectClassFactory factory = new SimpleCOMObjectClassFactory();
            factory.ClassContext = (uint)CLSCTX.CLSCTX_LOCAL_SERVER;
            factory.ClassId = Marshal.GenerateGuidForType(typeof(XApiCom));
            factory.Flags = (uint)REGCLS.REGCLS_MULTIPLEUSE | (uint)REGCLS.REGCLS_SUSPENDED;
            factory.RegisterClassObject();
            ClassFactoryBase.ResumeClassObjects();

            // Start up the garbage collection thread.
            GarbageCollection	GarbageCollector = new GarbageCollection(10000);
            Thread				GarbageCollectionThread = new Thread(new ThreadStart(GarbageCollector.GCWatch));

            // Set the name of the thread object.
            GarbageCollectionThread.Name = "Garbage Collection Thread";
            // Start the thread.
            GarbageCollectionThread.Start();

            // Start the message loop.
            MSG			msg;
            IntPtr		null_hwnd = new IntPtr(0);
            while (GetMessage(out msg, null_hwnd, 0, 0) != false)
            {
                TranslateMessage(ref msg);
                DispatchMessage(ref msg);
            }
            Console.WriteLine("Out of message loop.");

            // Revoke the class factory immediately.
            // Don't wait until the thread has stopped before
            // we perform revokation.
            factory.RevokeClassObject();
            Console.WriteLine("SimpleCOMObjectClassFactory Revoked.");

            // Now stop the Garbage Collector thread.
            GarbageCollector.StopThread();
            GarbageCollector.WaitForThreadToStop();
            Console.WriteLine("GarbageCollector thread stopped.");

            // Just an indication that this COM EXE Server is stopped.
            Console.WriteLine("Press [ENTER] to exit.");
            Console.ReadLine();
        }