Mam dziwny problem. Nie wiem czemu, ale Application.Exit() zamiast natychmiast wyłączyć program nic sobie nie robi i przepuszcza dalszy kod. To samo z metodą Stop() w Timerze. Również nic nie robi. Oto kawałek kodu:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
closeTimer = new System.Timers.Timer();
closeTimer.Elapsed += new System.Timers.ElapsedEventHandler(closeTimer_Elapsed);
closeTimer.Interval = 1000;
closeTimer.Enabled = true;
closeTimer.Start();
e.Cancel = true;
try
{
this.Visible = false;
}
catch (InvalidOperationException)
{
}
}
void closeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (Convert.ToString(rejestr.GetValue("Sending")).Equals("false"))
{
MessageBox.Show("1");
closeTimer.Stop();
Application.Exit();
}
else
{
MessageBox.Show("2");
closeTimer.Interval = 10000;
}
}
Specjalnie dodałem sobie messagebox'y, żeby wiedzieć co kiedy jest wywoływane. A więc kiedy już wartość z rejestru osiągnie pożadaną wartość, pokazuje mi się wreszczie MessageBox z numerem 1, ale potem pokazują się kolejne box'y bez końca, a Stop() powinno je zatrzymać. I aplikacja nadal działa, mimo wykonania Exit().
Wyjaśnię jaki jest cel tego działania. Czasami program wysyła na serwer pliki ~1-2MB, więc się trochę schodzi. Więc wysyłanie rozgrywa BackgroundWorker, który działa na dodatek na innej formie. Więc właśnie gdy skończy wysyłać, powiadamia o tym rejestr. A powyższy kod jest po to, aby nie przerwać wysyłania, tylko poczekać aż się skończy. Dla wygody użytkownika formę chowam, by myślał, że program się zamknął, a powinien naprawdę zamknąć się po chwili. Co tu może być źle?