Как я могу дождаться сигнала, прежде чем приступить к компиляции другого сегмента кода - PullRequest
0 голосов
/ 12 октября 2010

Могу ли я дождаться сигнала от события, чтобы при получении сигнала только я продолжал переходить к следующему сегменту кода?

Для ясности, у меня есть следующий код:

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

Проблема здесь в том, что условие if выполняется до события MediaFailed. Но я хочу дождаться, чтобы событие MediaFailed было выполнено 1-го, а затем условие if, и я не хочу использовать события здесь.

Как я мог ждать того же? Могу ли я использовать мьютекс или что-то подобное?

Ответы [ 2 ]

0 голосов
/ 12 октября 2010

Вы можете использовать AutoResetEvent для обработки этой ситуации.Но я бы определенно попытался найти другой путь, если он есть.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);
                        };
0 голосов
/ 12 октября 2010

Поместите ваш код в обработчик событий:

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