Я новичок в C# и WPF, так как учусь самостоятельно.
Я реализовал экран входа в систему и хочу, чтобы он действовал обычным образом: пользователь вводит информацию для входа (имя пользователя, pw). Если информация в порядке, экран входа в систему должен закрываться, и появляется следующий экран. Вот как я это сделал:
Мой код XAML для кнопки
<Button x:Name="BtnHelloConnect" Content="Connect" Click="BtnHelloConnect_Click" IsDefault="True"/>
При нажатии запускается этот код программной части:
private void BtnHelloConnect_Click(object sender, RoutedEventArgs e)
{
try
{
using (var Connect = new SqlConnection(connstr))
{
Connect.Open();
foreach (ConnectResponse connectResponse in new CheckConnection().CheckIdentity(TextBoxLoginID.Text, PasswprdBoxLoginMDP.Password, ComboBoxLoginInst.Text))
{
if (connectResponse.Reponse == "1")
{
LoggedInData.LoggedInUserId = TextBoxLoginID.Text; //These are some classes that I have created to stored logged-in Data
LoggedInData.LoggedInstitutionId = connectResponse.Entity;
AuthentificationAccess.CheckPrivilege(LoggedInData.LoggedInUserId, LoggedInData.LoggedInstitutionId);
}
else
{
MessageBox.Show(connectResponse.Reponse, "", MessageBoxButton.OK, MessageBoxImage.Stop);
return;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
internal class CheckConnection
{
//Here is the method where I execute a procedure to check whether the user has entered the right loggins. The method return a string "connectResponse"
}
internal class ConnectResponse
{
public string Reponse { get; set; }
public string Entity { get; set; }
}
public static class AuthentificationAccess
{
public static void CheckPrivilege (string username, string entityid)
{
string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
HomeWindow homeWindow = new HomeWindow();
MainWindow mainWindow = new MainWindow();
using (var Connect = new SqlConnection(connstr))
{
Connect.Open();
using (var Command = new SqlCommand("My Procedure", Connect))
{
Command.CommandType = CommandType.StoredProcedure;
Command.Parameters.Add("@username", SqlDbType.VarChar).Value = username;
Command.Parameters.Add("@entity_id", SqlDbType.VarChar).Value = entityid;
SqlDataReader dr = Command.ExecuteReader();
while (dr.Read())
{
string UserCategory = dr.GetString(0);
if (UserCategory == "Client")
{
homeWindow.MenuBarProfile.Visibility = Visibility.Collapsed;
}
else
{
MessageBox.Show(UserCategory, "", MessageBoxButton.OK, MessageBoxImage.Stop);
mainWindow.Show();
return;
}
}
Application.Current.MainWindow.Close();
homeWindow.Show();
}
}
}
}
Проблема что у меня происходит при закрытии главного окна (окна входа в систему) с помощью команды: Application.Current.MainWindow.Close();
.
При первом входе в систему все работает нормально: главное окно закрывается, а второе окно открывается.
Но во второй раз, когда я вхожу в систему, главное окно не закрывается, пока открывается второе окно.
Я потратил 3 дня, пытаясь найти решение для этого, и я просто учусь на блоги и видео на Youtube, я не смог решить эту проблему.
Я знаю, что здесь много похожих вопросов с теми же проблемами, но большинство касается решений в MVVM. Я не очень хорошо знаком со всем, что касается MVVM, поэтому мне трудно воспроизвести. Учитывая мою реализацию, есть ли простой способ решить эту проблему?