AutoResetEvent problem AutoResetEvent problem
Danke Danke:  0
Ergebnis 1 bis 2 von 2
  1. 12.09.2012, 10:07
    #1
    hallo,
    habe bei meiner silverlight app ein kleines problem bei der benutzung von AutoResetEvents :/
    ich poste erstmal den code:

    Login.xaml.cs
    Code:
    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());
                }
            }
    Controller.cs
    Code:
    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;
            }
    Network.cs
    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?
    0
     

  2. Warum zum Teufel benutzt du überhaupt ein AutoResetEvent? In Silverlight gibt es extra keine synchronen Methoden dafür, damit nichts blockt, und du versuchst mit dem AutoReset-"Trick" über Umwege deine Anwendung doch zum blockieren zu bringen.

    Dann benutzt du eine IAsyncResultToString, die du nicht zeigst. Diese kann aber rein logisch auch nicht funktionieren, da sie keine Referenz auf den HttpWebRequest 'req' hat. Verwende stattdessen req.EndGetResponse(ar)
    0
     

Ähnliche Themen

  1. WJ7 Problem und XAP Problem
    Von Putinas123 im Forum HTC 7 Mozart
    Antworten: 4
    Letzter Beitrag: 23.12.2011, 20:22
  2. Antworten: 0
    Letzter Beitrag: 09.07.2011, 15:34
  3. Antworten: 0
    Letzter Beitrag: 05.10.2010, 17:30
  4. Antworten: 3
    Letzter Beitrag: 29.07.2009, 13:30
  5. GMX Server Problem = HTC Client Problem
    Von Marco1981 im Forum Touch HD Communication
    Antworten: 5
    Letzter Beitrag: 20.03.2009, 13:59

Besucher haben diese Seite mit folgenden Suchbegriffen gefunden:

As AutoResetEvent() = New AutoResetEvent() {New AutoResetEvent(False) New AutoResetEvent(False)}

silverlight blockiert

autoresetevent wp7

Stichworte