如何在继续编译其他代码段之前等待信号

我可以等待来自事件的信号,以便在我接收信号时只能继续下一个代码段。如何在继续编译其他代码段之前等待信号

对于这就很清楚,我都有以下代码:

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

回到顶部