定义回调的一些问题

时间:2013-07-09 05:31:15

标签: c# .net windows-phone-8 windows-phone

我是.NET编程的新手,我的代码遇到了一些问题(可能是微不足道的)。 我正在为WP8上的视频录制演示应用程序。 每次帧捕获后我都需要回调。

我的代码如下:

private AudioVideoCaptureDevice captureDevice;

startcameraPreview()
{
    var res = AudioVideoCaptureDevice.GetAvailableCaptureResolutions(CameraSensorLocation.Back)[0];
    captureDevice = await AudioVideoCaptureDevice.OpenAsync(CameraSensorLocation.Back, res);
    captureDevice.PreviewFrameAvailable += new Windows.Foundation.TypedEventHandler<object, EventArgs>(VideoPreviewFrameAvailable);
    // NOTE: PreviewFrameAvailable is supposed to be a callback.
}

public void VideoPreviewFrameAvailable(object sender, EventArgs e)
{
     return;
}

在编译上面时,我收到错误:

No overload for 'VideoPreviewFrameAvailable' matches delegate 'Windows.Foundation.TypedEventHandler<object,System.EventArgs>'

请指导我如何解决此问题。

2 个答案:

答案 0 :(得分:0)

您的类型不匹配,请尝试

public void VideoPreviewFrameAvailable(object sender,EventArgs e)

在原始处理程序中,您有一个RoutedEventArgs,但处理程序需要EventArgs。

通常,创建处理程序方法的最佳方法是在键入“+ =”并选择intellisense中以“new”开头的条目,然后按Tab键或输入2次。 (如果您使用的是Sharp Develop或Visual Studio)

答案 1 :(得分:0)

我想出了实际的原因。

这是因为PreviewFrameAvailable期望一种不同的争论类型<ICameraCaptureDevice, object>

captureDevice.PreviewFrameAvailable += new Windows.Foundation.TypedEventHandler<ICameraCaptureDevice, object>(VideoPreviewFrameAvailable);

public void VideoPreviewFrameAvailable(ICameraCaptureDevice a, object b)
{
    nFrameCount++;
}

以上解决了问题。