public void DoWork()
        {
            Completed = false;
            Started   = true;
            string uid       = CFunctions.GenerateUID();
            string starttime = CFunctions.GetDateTime(0);

            Log.Write("[Threading] Starting thread (" + uid + ") to generate database output to " + Outfile.ToLower(), Log.Verbosity.Everything);

            CThread.Types threadtype = new CThread.Types(CThread.Types.Unmanaged);

            CDatabaseExporter de       = new CDatabaseExporter();
            CThread           exporter = new CThread()
            {
                Type = threadtype, Worker = new Thread(delegate() { de.Export(this, ref _DBConn, DiscoveredSites, DiscoveredServers); }), Id = uid
            };

            Core.ThreadManager.Add(exporter);
        }
        private void QueryManager()
        {
            for (int i = 0; i < Session.Queries.Count; i++)
            {
                if (!Session.Queries[i].Started)
                {
                    string tid = CFunctions.GenerateUID();
                    int    id  = i; // using local context variable to allow delegation
                    Log.Write("[Threading] Starting thread (" + tid + ") to run session query " + (i + 1) + "/" + Session.Queries.Count + " (" + Session.Queries[i].Id + ").", Log.Verbosity.Everything);

                    CThread.Types threadtype = new CThread.Types(CThread.Types.Unmanaged);
                    if ((Server.Type == CServiceType.ESXServer) || (Server.Type == CServiceType.VCenterServer))
                    {
                        threadtype = new CThread.Types(CThread.Types.VMware);
                    }
                    if ((Server.Type == CServiceType.SCVMMServer) || (Server.Type == CServiceType.HYVServer))
                    {
                        threadtype = new CThread.Types(CThread.Types.HyperV);
                    }

                    Core.ThreadManager.Add(new CThread()
                    {
                        Type = threadtype, Worker = new Thread(delegate() { DoQuery(id); }), Session = this, Id = tid
                    });
                }
            }
            do
            {
                bool status = true;
                for (int i = 0; i < Session.Queries.Count; i++)
                {
                    if (!Session.Queries[i].Completed)
                    {
                        status = false;
                    }
                }
                Session.Completed = status;
                Thread.Sleep(COptions.Session_Thread_Wait);
            } while (!Session.Completed);
        }