private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (_closed) return;
e.Cancel = true;
if (MessageBox.Show(
this,
LanguagesManager.Instance.MainWindow_Close_Message,
"Close",
MessageBoxButton.YesNo,
MessageBoxImage.Information) == MessageBoxResult.No)
{
return;
}
_closed = true;
var thread = new Thread(() =>
{
try
{
Settings.Instance.Save(_configrationDirectoryPaths["Settings"]);
this.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() =>
{
this.WindowState = System.Windows.WindowState.Minimized;
}));
_timerThread.Join();
_timerThread = null;
_statusBarThread.Join();
_statusBarThread = null;
_trafficMonitorThread.Join();
_trafficMonitorThread = null;
_catharsisManager.Save(_configrationDirectoryPaths["CatharsisManager"]);
_catharsisManager.Dispose();
_transferLimitManager.Stop();
_transferLimitManager.Save(_configrationDirectoryPaths["TransfarLimitManager"]);
_transferLimitManager.Dispose();
_connectionSettingManager.Stop();
_connectionSettingManager.Save(_configrationDirectoryPaths["ConnectionSettingManager"]);
_connectionSettingManager.Dispose();
_overlayNetworkManager.Stop();
_overlayNetworkManager.Save(_configrationDirectoryPaths["OverlayNetworkManager"]);
_overlayNetworkManager.Dispose();
_amoebaManager.EncodeStop();
_amoebaManager.DecodeStop();
_amoebaManager.Stop();
_amoebaManager.Save(_configrationDirectoryPaths["AmoebaManager"]);
_amoebaManager.Dispose();
NativeMethods.SetThreadExecutionState(ExecutionState.Continuous);
_notifyIcon.Visible = false;
this.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() =>
{
this.Close();
}));
}
catch (Exception ex)
{
Log.Error(ex);
}
});
thread.Priority = ThreadPriority.Highest;
thread.Name = "MainWindow_CloseThread";
thread.Start();
}