2013-04-04 93 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輪詢的此方法不理想。