Witam. Mam aplikację typu klient - serwer bazującą na TCP/IP. Po uruchomieniu klienta łączy się on z serwerem, podaje login oraz hasło, serwer sprawdza w bazie, czy wszystko jest OK i wysyła szczegółowe dane klienta. Jest jednak jeden problem. Otóż jest to serwer dla konkretnych użytkowników i każdy z nich otrzymał tymczasowe hasło pierwszego logowania. Przy pierwszym logowaniu klient musi zmienić swoje hasło. Obsługuje to serwer, który podczas logowania sprawdza w bazie, czy dany klient już się logował, a jeżeli nie, to wysyła wiadomość, że trzeba zmienić hasło. Teraz opiszę jak działa klient. Na początku w evencie Load() klienta wywoływana jest forma frmLogin, która pobiera od użytkownika dane logowania i wysyła je serwerowi. Serwer sprawdza czy dane są ok. Jeżeli tak, to sprawdza, czy klient już się logował. Jeżeli tak, to wysyła szczegółowe dane klientowi, który przekazuje je do formy głównej i zamyka obecną. Jeżeli klient się jeszcze nie logował, to zostanie wysłane specjalne zawiadomienie, które forma frmLogin przekaże formie głównej i zamknie obecną. Problem polega na tym, że po wysłaniu powiadomienia o tym, że trzeba zmienić hasło, forma frmLogin odbiera je prawidłowo, jednak po przekazaniu tego głównej formie i zamknięciu obecnej, program się nagle wyłącza. Co najciekawsze po ręcznej zmianie danych w bazie, aby serwer "myślał", że klient już się logował i zmienił hasło, wykonuje się nie zapisany kod, otóż główna forma się pokazuje(na czas logowania jest ukryta). Poniżej zamieszczam niezbędne kody:

  1. Fragment frmLogin(owner to główna forma):
if (r.ReadString() == ServerStatements.FirstLogin)
{
	MessageBox.Show("First login, bitch.");
	logged = false;
	owner.logged = false;
	firstLogin = true;
	owner.FirstLogin = true;
	//owner.FirstLogin = true;
	owner.UserLogin = login;
	owner.UserPassword = password;

	this.Close();
}
else
{
	logged = true;
	owner.logged = true;

	string datastring = r.ReadString();
	string[] data = datastring.Split(';');

	owner.UserLogin = data[0];
	owner.UserPassword = data[1];
	owner.UserName = data[2];
	owner.UserSurname = data[3];
	owner.UserMessages = data[4];
	owner.UserPermissions = data[5];

	this.Close();
}	
  1. Fragment głównej formy:
public bool logged = false, FirstLogin = false, changed = false;
private void ClientApp_Load(object sender, EventArgs e)
{
	this.Hide();

	frmLogin LoginBox = new frmLogin(this);
	LoginBox.ShowDialog();

	MessageBox.Show(logged.ToString());
	MessageBox.Show(FirstLogin.ToString());

	if (FirstLogin)
	{
		//Wywołanie formy odpowiedzialnej za zmianę hasła
	}
}

Gdyby jeszcze jakiś kod byłby potrzebny, to piszcie w postach, dodam w miarę możliwości. Proszę o pomoc.