我可以等待来自事件的信号,这样当我收到信号时,我才会继续下一个代码段吗?
为了说清楚,我有以下代码:
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
事件先执行,然后等待if条件,我不想在这里使用事件。
我怎么能等待呢?我可以使用互斥或类似的东西吗?
答案 0 :(得分:0)
您可以使用AutoResetEvent来处理这种情况。但如果有的话,我肯定会尝试找另一种方式。
var autoResetEvent = new AutoResetEvent(false);
hiddenMediaElement.Source = new 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);
};
答案 1 :(得分:-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);
};