protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
// speed up tile saving on exit
GMap.NET.GMaps.Instance.CacheOnIdleRead = false;
GMap.NET.GMaps.Instance.BoostCacheEngine = true;
log.Info("MainV2_FormClosing");
Settings.Instance["MainHeight"] = this.Height.ToString();
Settings.Instance["MainWidth"] = this.Width.ToString();
Settings.Instance["MainMaximised"] = this.WindowState.ToString();
Settings.Instance["MainLocX"] = this.Location.X.ToString();
Settings.Instance["MainLocY"] = this.Location.Y.ToString();
// close bases connection
try
{
comPort.logreadmode = false;
if (comPort.logfile != null)
comPort.logfile.Close();
if (comPort.rawlogfile != null)
comPort.rawlogfile.Close();
comPort.logfile = null;
comPort.rawlogfile = null;
}
catch
{
}
// close all connections
foreach (var port in Comports)
{
try
{
port.logreadmode = false;
if (port.logfile != null)
port.logfile.Close();
if (port.rawlogfile != null)
port.rawlogfile.Close();
port.logfile = null;
port.rawlogfile = null;
}
catch
{
}
}
Utilities.adsb.Stop();
Warnings.WarningEngine.Stop();
log.Info("closing vlcrender");
try
{
while (vlcrender.store.Count > 0)
vlcrender.store[0].Stop();
}
catch
{
}
log.Info("closing pluginthread");
pluginthreadrun = false;
if (pluginthread != null)
pluginthread.Join();
log.Info("closing serialthread");
serialThread = false;
if (serialreaderthread != null)
serialreaderthread.Join();
log.Info("closing joystickthread");
joystickthreadrun = false;
if (joystickthread != null)
joystickthread.Join();
log.Info("closing httpthread");
// if we are waiting on a socket we need to force an abort
httpserver.Stop();
log.Info("sorting tlogs");
try
{
System.Threading.ThreadPool.QueueUserWorkItem((WaitCallback) delegate
{
try
{
MissionPlanner.Log.LogSort.SortLogs(Directory.GetFiles(Settings.Instance.LogDir, "*.tlog"));
}
catch
{
}
}
);
}
catch
{
}
log.Info("closing MyView");
// close all tabs
MyView.Dispose();
log.Info("closing fd");
try
{
FlightData.Dispose();
}
catch
{
}
log.Info("closing fp");
try
{
FlightPlanner.Dispose();
}
catch
{
}
log.Info("closing sim");
try
{
Simulation.Dispose();
}
catch
{
}
try
{
if (comPort.BaseStream.IsOpen)
comPort.Close();
}
catch
{
} // i get alot of these errors, the port is still open, but not valid - user has unpluged usb
// save config
SaveConfig();
Console.WriteLine(httpthread.IsAlive);
Console.WriteLine(joystickthread.IsAlive);
Console.WriteLine(serialreaderthread.IsAlive);
Console.WriteLine(pluginthread.IsAlive);
log.Info("MainV2_FormClosing done");
if (MONO)
this.Dispose();
}