2010-04-19 13 views
5

Sto utilizzando Silverlight 4 per accedere alla web cam. Tutto funziona bene quando avvio la web cam su un evento click del pulsante, ottengo il permesso per il permesso. Vorrei che la web cam si avvii quando viene caricato il controllo utente, ma per qualche motivo quando eseguo lo stesso codice sull'evento Loaded, non ricevo un prompt quando eseguo il seguente codice: 'Silverlight 4 autorizzazione camma web sul caricamento del controllo utente

CaptureDeviceConfiguration.RequestDeviceAccess ()

Qualcuno ha un lavoro in giro per questo?

+0

Hai trovato qualche soluzione per questo? Forse una soluzione alternativa? – morsanu

risposta

1

La sicurezza intorno all'accesso ai dispositivi locali è molto stretta. L'avvio dell'acquisizione deve essere preceduto da un'azione dell'utente.

Invece di avviare l'acquisizione dall'evento caricato, è necessario spostarlo in un evento Click.

codice dietro:

public void StartCam() 
{ 
    VideoCaptureDevice dev = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice(); 
    if(CaptureDeviceConfiguration.RequestDeviceAccess() && 
    CaptureDeviceConfiguration.AllowedDeviceAccess) 
    { 
    CaptureSource capture = new CaptureSource(); 
    capture.VideoCaptureDevice = dev; 

    VideoBrush videoBrush = new VideoBrush(); 
    videoBrush.SetSource(capture); 

    capture.Start(); 

    WebCamRectangle.Fill = videoBrush; 
    } 
} 

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    StartCam(); 
} 

Xaml:

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="49*" /> 
     <RowDefinition Height="251*" /> 
    </Grid.RowDefinitions> 
    <Rectangle Name="WebCamRectangle" 
       Stroke="Black" StrokeThickness="1" Grid.Row="1" /> 
    <Button Content="Start" Height="25" HorizontalAlignment="Left" 
      Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" 
      Width="135" Click="button1_Click" /> 
</Grid> 
2

ho trovato una soluzione al problema. Clicco automaticamente sul pulsante che avvia la webcam in streaming sull'evento Loaded del controllo.

ButtonAutomationPeer peer = new ButtonAutomationPeer(btnStartWebcam); 
IInvokeProvider invokeProv = 
    peer.GetPattern(PatternInterface.Invoke) 
    as IInvokeProvider; 
invokeProv.Invoke(); 

Questo fa il lavoro per me perché non mi interessa avere un pulsante sull'interfaccia utente. Ma immagino tu possa crearne uno fittizio e nasconderlo se è necessario.

+0

ottima soluzione. grazie – ILya

Problemi correlati