public void Dispose() { _worker.Dispose(); _worker = null; var synchronizer = _container.Resolve <IUISynchronizer>(); synchronizer.RunSync(() => _memoryReader.Dispose()); _memoryReader = null; _container = null; }
public FFXIVMemoryManager(IDIContext container) { _container = container ?? throw new ArgumentNullException(nameof(container)); _worker = new IndependendBackgroundWorker(); var sharlayanResourceFolder = System.IO.Path.Combine(GobchatContext.ResourceLocation, @"sharlayan"); System.IO.Directory.CreateDirectory(sharlayanResourceFolder); //needs to be done on the same thread as dispose, anchore it to ui thread, because that one never changes var synchronizer = container.Resolve <IUISynchronizer>(); _memoryReader = synchronizer.RunSync(() => new FFXIVMemoryReader()); _memoryReader.LocalCacheDirectory = sharlayanResourceFolder; _memoryReader.Initialize(); _memoryReader.OnProcessChanged += MemoryReader_OnProcessChanged; _memoryReader.OnWindowFocusChanged += MemoryReader_OnWindowFocusChanged; _worker.Start(Task_ConnectMemoryReader); }