如何在继续编译其他代码段之前等待信号
我可以等待来自事件的信号,以便在我接收信号时只能继续下一个代码段。如何在继续编译其他代码段之前等待信号
对于这就很清楚,我都有以下代码:
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条件,我不想在这里使用事件。
我怎么能等待相同的。我可以使用互斥体或类似的东西吗?
回答:
把你的代码在事件处理程序:
hiddenMediaElement.Source = new Uri(strMediaFileName, UriKind.RelativeOrAbsolute); hiddenMediaElement.MediaFailed += (obj, Sender) =>
{
ObjChildMediaPlayer.Visibility = Visibility.Visible;
ObjChildMediaPlayer._currenTitle = strTitle;
ObjChildMediaPlayer.Show();
Content_FullScreenChanged(null, null);
};
回答:
可以使用的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);
};
以上是 如何在继续编译其他代码段之前等待信号 的全部内容, 来源链接: utcz.com/qa/261126.html