Hallo,
Via een formulier laat ik een paswoord invullen en in de main class wil ik, mbv een bw controleren of het correct is, en daarna al dan niet een paar taken laten uitvoeren. De code hieronder werkt zolang de while (worker.IsBusy) er niet bij staat (anders blokkeert het formulier), maar dan wordt setAdminProperties(); tegelijk met de bw uitgevoerd en dus niet erna wanneer de gebruiker is ingelogd als admin. Een gelijkaardige setup heb ik eerder in het programma ook gebruikt en daar werkt de while (worker.IsBusy) en de code die erna staat prima. Nog even dit: ik heb een paar if-statements weggelaten om de code hier wat korter te houden.
De vraag is dus: waarom zorgt while (worker.IsBusy) voor problemen?
Via een formulier laat ik een paswoord invullen en in de main class wil ik, mbv een bw controleren of het correct is, en daarna al dan niet een paar taken laten uitvoeren. De code hieronder werkt zolang de while (worker.IsBusy) er niet bij staat (anders blokkeert het formulier), maar dan wordt setAdminProperties(); tegelijk met de bw uitgevoerd en dus niet erna wanneer de gebruiker is ingelogd als admin. Een gelijkaardige setup heb ik eerder in het programma ook gebruikt en daar werkt de while (worker.IsBusy) en de code die erna staat prima. Nog even dit: ik heb een paar if-statements weggelaten om de code hier wat korter te houden.
De vraag is dus: waarom zorgt while (worker.IsBusy) voor problemen?
Code:
private void accessAdminLogin_Click(object sender2, RoutedEventArgs e)
{
adminlogin = new LoginForm(); // create login form
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (sender, args) =>
{
while (!_isLoggedIn) // check password as long as not logged in
{
while (!adminlogin.checkInput) {Thread.Sleep(100);} // is set to true when OK button is clicked
if (adminlogin.password == "ok" && adminlogin.username == "ok") // password and username are set when OK button is clicked
{
_isLoggedIn = true;
MessageBox.Show("You are logged in as Adminstrator.");
}
else
{
MessageBox.Show("You entered a wrong password or username.");
adminlogin.checkInput = false; // a new input is necessary before password is checked again (see thread.sleep above)
}
}
};
worker.RunWorkerAsync();
while (worker.IsBusy)
{
if (_isLoggedIn) worker.CancelAsync();
}
setAdminProperties();
}
}