2017-10-25 7 views
1

WindowsフォームからWindowsカメラのUIを呼び出す方法を理解しようとしています。 CaptureFileAsync()のキャストの問題

私はこれをしなかったし、それがコンパイルを行います。

Public Function ShootPicture() As StorageFile 
    Dim captureUI As New CameraCaptureUI 
    captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg 
    captureUI.PhotoSettings.AllowCropping = False 
    Dim GetPhotoTask As Task(Of StorageFile) = captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo) 
    GetPhotoTask.Wait() ' Blocks current thread until CaptureFileAsync task completes' 
    Dim result As StorageFile = GetPhotoTask.Result 
    Return result 
End Function 

をしかし.capturefileAsync()の「System.InvalidCastExceptionの」実行エラーがあります:型「System._ComObjectは」System.threading」としてキャストすることはできません.tasks.task '

これを修正する方法はありますか?おかげ

それはここに助けることができる場合は、C#のコードを翻訳したものです:

public StorageFile ShootPicture() 
{ 
    CameraCaptureUI captureUI = new CameraCaptureUI(); 
    captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg; 
    captureUI.PhotoSettings.AllowCropping = false; 
    Task<StorageFile> GetPhotoTask = captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo); 
    GetPhotoTask.Wait(); 
    // Blocks current thread until CaptureFileAsync task completes 
    StorageFile result = GetPhotoTask.Result; 
    return result; 
} 

答えて

1

CaptureFileAsyncはIAsyncOperationを返し、そうのawait代わりにタスクの使用してみてください:N0Aliasを支援するための

Dim result As StorageFile = Await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo) 
+0

感謝を。 問題は、保護オーバーライド関数から呼び出されることが予定されているため、関数がAsyncと宣言される必要があり、できません。 (非同期で署名を変更し、オーバーライドに失敗した場合) 私は、非同期ではなく同期の場合にしようとしました。 –

+0

とにかく、私はあなたの解決策を非同期関数で試してみましたが、それはコンパイルされません: 'エラー2:\t表現タイプは'Windows.Foundation.IAsyncOperation(Of Windows.Storage.StorageFile) 'です。したがって、待つことはできません –

+0

オーバーライドしていたメソッドを、エラーが消える非同期デコレータで飾ることができればうれしいです。たぶん、あなたがオーバーライドしているものから呼び出される、このコードを含む新しいAsyncメソッドを作成します。 – N0Alias

関連する問題