public void WaitForSymbolsLoaded()
        {
            var needReload    = true;
            var oldModuleList = _moduleList;

            _moduleList = ASymbolLoaderThread.GetModuleList(Process.Native.Id);
            if (oldModuleList.Length > 0 && oldModuleList.Length == _moduleList.Length)
            {
                needReload = false;
                for (var i = 0; i < oldModuleList.Length; i++)
                {
                    var nameChanged    = oldModuleList[i].ModuleName != _moduleList[i].ModuleName;
                    var addressChanged = oldModuleList[i].BaseAddress != _moduleList[i].BaseAddress;
                    needReload = nameChanged || addressChanged;
                    if (needReload)
                    {
                        break;
                    }
                }
            }
            if (needReload | SymbolList.Length == 0)
            {
                lock (SymbolLock)
                {
                    _symbolLoaderThread         = new ASymbolLoaderThread();
                    _symbolLoaderThread.Process = Process;
                    _symbolLoaderThread.Execute();
                    while (_symbolLoaderThread.IsLoading)
                    {
                        Thread.Sleep(10);
                    }
                    SymbolList.Assign(_symbolLoaderThread.SymbolList.TakeAll());
                }
            }
        }
 public ASymbolHandler()
 {
     Process             = null;
     _symbolLoaderThread = null;
     SymbolList          = new UArrayManager <ASymbol>();
     UserDefinedSymbols  = new UArrayManager <AUserDefinedSymbol>();
     _moduleList         = new AModuleInfoArray();
     ShowSymbols         = false;
     ShowModules         = false;
     ShowSections        = false;
 }