2016-07-11 15 views
1

hoffe, es ist etwas einfach dumm, aber ich spinne meine Räder.Nehmen Sie Bild mit Windows 10, WinRT

Ich habe ein Surface Pro 4, Windows 10 und Visual Studio 2013 Professional.
Entwickeln von WPF mit C# 4.5.

Zusammenfassend, alles was ich versuche, eine einfache Kamera zu erfassen, um ein Bild zu speichern, ohne auf andere 3rd-Party-Bibliotheken zurückgreifen, habe ich keine Kontrolle über. Der Rest dieses Posts sind Details von anderen Forschungsergebnissen, die ich untersucht und ausprobiert habe und was gescheitert ist und was solche Nachricht vom Compiler.

Wieder einfache Kamera, Bild aufnehmen, auf Festplatte speichern, aber alle async-await-Optionen scheinen Compilerfehler zu werfen.

EDIT 1 SAMPLE CODE

Hier ist Code aus dem Formular WPF. Ich habe nicht einmal Kontrolle in der Form, da ich nicht einmal das "Warten" auf die Kompilierung bekommen kann.

using System; 
using Windows.Media.Capture; 
using System.Windows; 

namespace CameraCapture 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      JustDoIt(); 
     } 

     private MediaCapture _mediaManager; 
     private async void JustDoIt() 
     { 
      //initialize mediacapture with default camera 
      _mediaManager = new MediaCapture(); 
      await _mediaManager.InitializeAsync(); 

      if (_mediaManager == null) 
       MessageBox.Show("Failed Initialize"); 

      await _mediaManager.StartPreviewAsync(); 
     } 
    } 
} 

Und mein Projekt hat auch pro andere Verbindungen von unten erforscht, die DLL-Dateien für

System.Runtime.dll and 
System.Runtime.WindowsRuntime.dll 

Compile Fehler für jeden der ‚erwarten‘

Error 1 'await' requires that the type 'Windows.Foundation.IAsyncAction' have a suitable GetAwaiter method. Are you missing a using directive for 'System'? 

und ich habe „mit System;" als erste Zeile. Gibt es noch andere "Wartezeiten" bei der Verwendung von WinRT vs Standard-System-Include?

ENDE EDIT

Ich begann mit https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.capture.cameracaptureui.aspx CameraCaptureUI Klasse

fand ich dann diesen Link https://www.eternalcoding.com/?p=183 Wie spezifische WinRT API von Desktop-Apps nutzen, habe ich versucht, alle Schritte gehen, wie skizziert und bekommen Fehler verbunden mit

erwarten ... haben Sie eine geeignete GetAwaiter-Methode.

So schaute ich über asynch und warten und kam über

How and When to use `async` and `await` , wie und wann async und await zu verwenden.

Also verschrottete ich das erste Kamera-Capture-Projekt, startete ein neues, und tat diese Version , die einfache thread.sleep Verzögerung hat, um das Konzept von asynch/erwarten zu zeigen. Dieser Teil funktioniert.

So, jetzt, füge ich den Verweis auf das Projekt zurück und manuell die

<PropertyGroup> 
    <TargetPlatformVersion>8.0</TargetPlatformVersion> 
    </PropertyGroup> 

hinzufügen bearbeiten die Verweise auf belichten das Windows/Core-pro der ersten Verbindung aussetzen und dann auf die Windows.Media bekommen Zugang , Windows-Speicher. Ich füge nur das erste bisschen Code über die CameraCaptureUI und CaptureFileAsync als nur einen Startpunkt wie ... hinzu

private async void Camera1() 
{ 
    var cameraUi = new Windows.Media.Capture.CameraCaptureUI(); 
    var capturedMedia = await cameraUi.CaptureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.Video); 

    if (capturedMedia == null) 
     return; 

    MessageBox.Show("Valid Camera"); 
} 

und einen Compiler-Fehler erhalten:

'erwarten' erfordert, dass der Typ 'Windows.Foundation.IAsyncOperation' eine geeignete GetAwaiter Methode haben. Vermissen Sie eine Verwendungsrichtlinie für 'System'?

Auch zurück in dem ursprünglichen Versuch, Windows-Version über

private async void Camera2() 
{ 
    CameraCaptureUI dialog = new CameraCaptureUI(); 
    Windows.Foundation.Size aspectRatio = new Windows.Foundation.Size(16, 9); 
    dialog.PhotoSettings.CroppedAspectRatio = aspectRatio; 

    StorageFile file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo); 
    if (file == null) 
     return; 

    MessageBox.Show("Valid Storage File Captured"); 
} 

Ich habe sogar System.Runtime und System.RunTime.WindowsRuntime als Verweis auf das Projekt aber noch auf der Kompilierung fehlschlagen.

Was fehlt mir. Ich weiß, dass sich die Dinge zwischen verschiedenen Versionen wie Windows 8.1 und Windows 10 und Upgrades auf Features/Bibliotheken ändern, aber warum warten, funktioniert in eine Richtung, aber nicht in eine andere.

+0

unklar, was die Frage zu viel Hintergrundinformationen ist –

Antwort

0

Für diejenigen am Kopf kratzen, wie ich tat, kam ich schließlich auf einen anderen Dienstposten, die eine fehlende Verbindung hatte ...

How can i import windows.media.capture in my WPF project?

Der Unterschied der

<TargetPlatformVersion>8.1</TargetPlatformVersion> 

anstelle von 8,0 war .

8.1 zeigte viele der einzelnen DLL-Referenzen von Foundation, Media usw., aber nicht die einzelne "Windows" -Dll.

Einmal auf 8.1 geändert und erkannte die Windows-DLL, alle in Bezug auf die Media-Manager oder CameraCaptureUI Optionen gearbeitet.

Verwandte Themen