2013-04-04 89 views
0

我有从网络摄像头获取照片的代码。我需要写一个预计完成这个过程的机制。我该怎么做呢?我有以下代码:如何等待完成异步功能c#winrt

ImageEncodingProperties imageProperties = ImageEncodingProperties.CreateJpeg(); 
var memStream3 = new Windows.Storage.Streams.InMemoryRandomAccessStream(); 
var mediaCaptureMgr1 = new MediaCapture(); 
await mediaCaptureMgr1.InitializeAsync(); 
mediaCaptureMgr1.SetPreviewMirroring(true); 
await mediaCaptureMgr1.CapturePhotoToStreamAsync(imageProperties, memStream3); 
await memStream3.FlushAsync(); 
memStream3.Seek(0); 
WriteableBitmap wb1 = new WriteableBitmap(320, 240); 
wb1.SetSource(memStream3); 
//1 
while (true) 
{ 
    await Task.Delay(TimeSpan.FromSeconds(0.1)); 
    //if CapturePhotoToStreamAsync finished? OR memStream3 not null? 
    //break; 
} 
//2 

如果我开始在// 1处做WB1什么,我也不会因为WB1 = NULL工作。如果我在// 2开始做wb1! = null,因为我一直等到所有的异步函数完成。

+0

你想替换'while'循环吗? – 2013-04-04 08:28:34

+2

我不明白你为什么在那里有'while'循环。我也不明白你在问什么。请在此处更具体地说明...... – MoonKnight 2013-04-04 08:30:43

+2

当您等待'CapturePhotoToStreamAsync'方法时,该方法已在后面的代码行中完成。这是使用await的关键。 – JustAnotherUserYouMayKnow 2013-04-04 08:33:12

回答

2

而不是wb1.SetSource(memStream3);你应该打电话await wb1.SetSourceAsync(memStream3);和所有应该是好的。否则,您可以设置var wb1 = new WriteableBitmap(1, 1);并等待,直到SetSource完成时,wb1.PixelWidth增长到大于1,但是使用Task.Delay轮询的此方法不理想。