用户控件加载时Silverlight 4网络摄像头权限

时间:2010-04-19 03:32:08

标签: silverlight webcam

我正在使用Silverlight 4来访问网络摄像头。当我在按钮点击事件上启动网络摄像头时,一切正常,我得到了许可提示。我希望在用户控件加载时启动网络摄像头,但出于某种原因,当我在Loaded事件上运行相同的代码时,我在执行以下代码时没有得到提示:'

CaptureDeviceConfiguration.RequestDeviceAccess()

有没有人可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

我找到了问题的解决方法。我自动单击在控件的Loaded事件上启动网络摄像头流的按钮。

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

这对我来说很重要,因为我不介意在UI上有一个按钮。但我想你可以创建一个虚拟的并在必要时隐藏它。

答案 1 :(得分:1)

访问本地设备的安全性非常紧张。开始捕获必须之前是用户操作。

您不必从已加载的事件开始捕获,而是必须将其移动到Click事件。

代码背后:

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>