2010-10-12 79 views
0

我可以等待來自事件的信號,以便在我接收信號時只能繼續下一個代碼段。如何在繼續編譯其他代碼段之前等待信號

對於這就很清楚,我都有以下代碼:

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); 
         } 

這裏的問題是,如果條件的MediaFailed事件之前執行。但我想等待mediaFailed事件執行1st,然後if條件,我不想在這裏使用事件。

我怎麼能等待相同的。我可以使用互斥體或類似的東西嗎?

回答

-1

把你的代碼在事件處理程序:

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

我想從事件中的信號繼續執行代碼。 – Simsons 2010-10-12 12:50:35

0

可以使用的AutoResetEvent來處理這種情況。但我肯定會嘗試找到另一種方式,如果有的話。

var autoResetEvent = new AutoResetEvent(false); 

hiddenMediaElement.Source =新URI(strMediaFileName,UriKind.RelativeOrAbsolute); hiddenMediaElement.MediaFailed + =(obj,Sender)=> { bMediaError = true; autoResetEvent.Set(); }; hiddenMediaElement.MediaOpened + =(obj,Sender)=> {
//我認爲這發生在成功時。否則將它放在處理成功的處理程序中 autoResetEvent.Set(); };

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

或...我不確定這是否可行,但可以試用。

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