protected override void Dispose(bool disposeManagedResources) { // Only clean up managed objects if disposing (i.e. not called from destructor) if (disposeManagedResources) { try { Cleanup(); } catch { } try { // Uninstall Hooks if (Hooks.Count > 0) { // First disable the hook (by excluding all threads) and wait long enough to ensure that all hooks are not active foreach (var hook in Hooks) { // Lets ensure that no threads will be intercepted again hook.Deactivate(); } Thread.Sleep(100); // Now we can dispose of the hooks (which triggers the removal of the hook) foreach (var hook in Hooks) { hook.Dispose(); } Hooks.Clear(); } try { // Remove the event handlers Interface.ScreenshotRequested -= InterfaceEventProxy.ScreenshotRequestedProxyHandler; Interface.DisplayText -= InterfaceEventProxy.DisplayTextProxyHandler; } catch (RemotingException) { } // Ignore remoting exceptions (host process may have been closed) } catch { } } base.Dispose(disposeManagedResources); }
/// <summary> /// Clears the hook. /// </summary> internal void ClearHooks() => Hooks.Clear();