2010-10-12 5 views
0

Puis-je attendre un signal d'un événement pour que, lorsque je reçois le signal, je passe au segment de code suivant.Comment puis-je attendre un signal avant de procéder à la compilation d'un autre segment de code

pour le rendre clair, j'ai le code follwoing:

hiddenMediaElement.Source = new Uri(strMediaFileName, UriKind.RelativeOrAbsolute); 
         hiddenMediaElement.MediaFailed += (obj, Sender) => 
          { 
           bMediaError = true; 
          }; 

         if (!bMediaError) 
         { 
          ObjChildMediaPlayer.Visibility = Visibility.Visible; 
          ObjChildMediaPlayer._currenTitle = strTitle; 
          ObjChildMediaPlayer.Show(); 
          Content_FullScreenChanged(null, null); 
         } 

Le problème ici est la condition if est exécutée avant l'événement MediaFailed. Mais je veux attendre que l'événement mediaFailed soit exécuté en premier, puis la condition if et je ne veux pas utiliser les événements ici.

Comment pourrais-je attendre la même chose. Puis-je utiliser mutex ou quelque chose de similaire.

Répondre

-1

Mettez votre code dans le gestionnaire d'événements:

hiddenMediaElement.Source = new Uri(strMediaFileName, UriKind.RelativeOrAbsolute); 
hiddenMediaElement.MediaFailed += (obj, Sender) => 
{ 
    ObjChildMediaPlayer.Visibility = Visibility.Visible; 
    ObjChildMediaPlayer._currenTitle = strTitle; 
    ObjChildMediaPlayer.Show(); 
    Content_FullScreenChanged(null, null); 
}; 
+0

Je veux un signal de l'événement pour poursuivre le code. – Simsons

0

Vous pouvez utiliser AutoResetEvent pour gérer cette situation. Mais je vais certainement essayer de trouver un autre moyen s'il y en a un.

var autoResetEvent = new AutoResetEvent(false); 

hiddenMediaElement.Source = new Uri (strMediaFileName, UriKind.RelativeOrAbsolute); hiddenMediaElement.MediaFailed + = (obj, expéditeur) => { bMediaError = true; autoResetEvent.Set(); }; hiddenMediaElement.MediaOpened + = (obj, expéditeur) => {
// Je pense que cela se produit lorsqu'il est réussi. Sinon, mettez-le dans le gestionnaire qui gère un succès autoResetEvent.Set(); };

 autoResetEvent.WaitOne(); // set a timeout value 
        if (!bMediaError) 
        { 
         ObjChildMediaPlayer.Visibility = Visibility.Visible; 
         ObjChildMediaPlayer._currenTitle = strTitle; 
         ObjChildMediaPlayer.Show(); 
         Content_FullScreenChanged(null, null); 
        } 

Ou ... Je ne suis pas sûr que cela fonctionnera, mais essayez-le.

hiddenMediaElement.Source = new Uri(strMediaFileName, UriKind.RelativeOrAbsolute); 
     hiddenMediaElement.MediaOpened += (obj, sender) => 
         { 
      ObjChildMediaPlayer.Visibility = Visibility.Visible; 
          ObjChildMediaPlayer._currenTitle = strTitle; 
          ObjChildMediaPlayer.Show(); 
          Content_FullScreenChanged(null, null); 
         };