/// <summary> /// Raises the <see cref="E:System.Windows.Forms.Form.Load" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param> protected override void OnLoad(EventArgs e) { base.OnLoad(e); try { GorgonExample.PlugInLocationDirectory = new DirectoryInfo(Settings.Default.PlugInLocation); // Create the assembly cache. _assemblies = new GorgonMefPlugInCache(GorgonApplication.Log); _assemblies.LoadPlugInAssemblies(GorgonExample.GetPlugInPath().FullName, "Gorgon.Input.XInput.dll"); // Create the plug services. IGorgonPlugInService pluginService = new GorgonMefPlugInService(_assemblies); // Create the gaming device driver factory. var factory = new GorgonGamingDeviceDriverFactory(pluginService, GorgonApplication.Log); // Create our factory. _driver = factory.LoadDriver("Gorgon.Input.XInput.GorgonXInputDriver"); _stickPosition = new PointF[3]; _sprayStates = new SprayCan[3]; // Get our list of active controllers. UpdateActiveControllers(); // Get the graphics interface for our panel. _surface = new DrawingSurface(panelDisplay); // Set up our idle loop. GorgonApplication.IdleMethod += Idle; // Launch a background task to check for connected devices. Task.Run(CheckForConnectedDevices); } catch (Exception ex) { // We do this here instead of just calling the dialog because this // function will send the exception to the Gorgon log file. GorgonExample.HandleException(ex); GorgonApplication.Quit(); } }
/// <summary> /// Raises the <see cref="E:System.Windows.Forms.Form.FormClosing" /> event. /// </summary> /// <param name="e">A <see cref="T:System.Windows.Forms.FormClosingEventArgs" /> that contains the event data.</param> protected override void OnFormClosing(FormClosingEventArgs e) { base.OnFormClosing(e); if (_controllers != null) { foreach (IGorgonGamingDevice controller in _controllers) { controller.Dispose(); } } _assemblies?.Dispose(); if (_surface == null) { return; } _surface.Dispose(); _surface = null; }