2010-10-12 3 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 будет выполнено первым, а затем условие 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

0

Вы можете использовать AutoResetEvent, чтобы справиться с этой ситуацией. Но я определенно попытаюсь найти другой способ, если он есть.

var autoResetEvent = new AutoResetEvent(false); 

hiddenMediaElement.Source = новый Ури (strMediaFileName, UriKind.RelativeOrAbsolute); hiddenMediaElement.MediaFailed + = (obj, Sender) => { bMediaError = true; autoResetEvent.Set(); }; hiddenMediaElement.MediaOpened + = (obj, Sender) => {
// Я думаю, что это происходит, когда оно успешное. Else положил его в обработчик, который обрабатывает успех 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); 
         }; 
Смежные вопросы