Web カメラからのビデオ ストリームを表示するプログラム (WinRT) があります。Media Foundationの初期化の前後に、programm は関数ShowMessageを呼び出します。私はこれらの電話にコメントしました。以下に示すコードが実行されると、Web カメラからのビデオ ストリームが表示されます。しかし、呼び出し関数ShowMessageのコメントを外すと、最初の呼び出し( //first call ) が完了し、Web カメラからのビデオ ストリームが表示されますが、2 回目の呼び出し ( //second call ) は呼び出されません。 2 番目のメッセージは表示されません)。Web カメラからのビデオ ストリームが表示され、ShowMessage の両方の呼び出しが機能するようにするにはどうすればよいですか?
XAML:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<CaptureElement x:Name="myCaptureElement" Margin="504,124,400,350" FlowDirection="RightToLeft" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Fill" MinWidth="300" MinHeight="200" Height="294" Width="462" />
<Rectangle x:Name="rect1" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="43,292,0,0" Stroke="Black" VerticalAlignment="Top" Width="100"/>
</Grid>
C#:
public MainPage()
{
this.InitializeComponent();
Func<Task> unnamed = async () =>
{
await TestPhoto();
};
unnamed();
}
private async Task TestPhoto()
{
try
{
//await ShowMessage("Do something",true);//first call
var devInfoCollection = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
var settings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
settings.VideoDeviceId = devInfoCollection[0].Id;
var mediaCaptureMgr = new MediaCapture();
await mediaCaptureMgr.InitializeAsync();
mediaCaptureMgr.SetPreviewMirroring(true);
myCaptureElement.Source = mediaCaptureMgr;
await mediaCaptureMgr.StartPreviewAsync();
ImageEncodingProperties imageProperties2 = ImageEncodingProperties.CreateJpeg();
var memStream3 = new Windows.Storage.Streams.InMemoryRandomAccessStream();
var mediaCaptureMgr1 = new MediaCapture();
await mediaCaptureMgr1.InitializeAsync();
mediaCaptureMgr1.SetPreviewMirroring(true);
await mediaCaptureMgr1.CapturePhotoToStreamAsync(imageProperties2, memStream3);
await memStream3.FlushAsync();
memStream3.Seek(0);
WriteableBitmap wp1 = new WriteableBitmap(1, 1); ;
await wp1.SetSourceAsync(memStream3);
//await ShowMessage("Do something",false);//second call
}
catch (Exception)
{
}
}
public async Task ShowMessage(String s, bool b)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
if (b)
{
rect1.Visibility=Visibility.Collapsed;
}
else
{
rect1.Visibility=Visibility.Visible;
}
});
Random r=new Random();
await new MessageDialog(s+" "+r.Next(1000), "Information").ShowAsync();
}