hallo,
habe bei meiner silverlight app ein kleines problem bei der benutzung von AutoResetEvents :/
ich poste erstmal den code:
Login.xaml.cs
Controller.csCode:private void loginBtn_Click(object sender, RoutedEventArgs e)
{
if (userBox.Text.Length == 0 || pswBox.Password.Length == 0)
MessageBox.Show(LoginStringRes.emptyLoginMsgBoxMessage, LoginStringRes.emptyLoginMsgBoxTitle, MessageBoxButton.OK);
else
{
string result = Controller.GetController().TryToLogin(userBox.Text, MD5Core.GetHashString(pswBox.Password).ToLower());
}
}
Network.csCode:public string TryToLogin(string username, string psw)
{
string result = "";
AutoResetEvent are = new AutoResetEvent(false);
network.LoggedIn += new Network.LoginEventHandler(delegate(object sender, LoginEventArgs e)
{
if (e.isSuccessful)
result = "success";
else
result = e.errorMsg;
are.Set();
});
network.Login(username, psw);
are.WaitOne();
return result;
}
Code:public delegate void LoginEventHandler(object sender, LoginEventArgs e);
public event LoginEventHandler LoggedIn;
protected virtual void OnLoggedIn(LoginEventArgs e)
{
LoginEventHandler eventCopy = LoggedIn;
if (eventCopy != null)
{ eventCopy(this, e); }
}
public void Login(string username, string psw)
{
string data = "";
string extension = String.Format("?login&username={0}&user_psw={1}", username, psw);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(new Uri(UrlStringRes.api + extension));
req.BeginGetResponse(delegate(IAsyncResult ar)
{
data = IAsyncResultToString(ar);
if (data != "err")
{
XDocument doc = XDocument.Parse(data);
if (doc.Element("user").Element("error") == null)
{
string userId = (string)doc.Element("user").Element("id");
string userName = (string)doc.Element("user").Element("username");
string userEmail = (string)doc.Element("user").Element("mail");
string portal = (string)doc.Element("user").Element("portal");
string userStatus = (string)doc.Element("user").Element("status");
string active = (string)doc.Element("user").Element("isActive");
Controller.GetController().SetUser(userId, userName, userEmail, userStatus, portal, active);
string temp = Controller.GetController().GetUserData("username");
OnLoggedIn(new LoginEventArgs(true, null));
}
else
OnLoggedIn(new LoginEventArgs(false, ErrorStringRes.userPswNotMatched));
}
else
OnLoggedIn(new LoginEventArgs(false, ErrorStringRes.noConnection));
}, req);
}
das problem ist nun das er völlig blockiert trotz are.Set() :/ das event wird leider nie geworfen ...
ich habe per breakpoints geguckt wo er überall reingeht und wo nicht ... er geht zwar in die Login methode der Network klasse rein aber erreicht nicht den delegaten bei der BeginGetResponse Methode.
Hat jemand ne ahnung/idee oder einen anderen lösungsvorschlag?