Jim*_*myK 2 c# exception-handling nullreferenceexception kinect-sdk visual-studio-2013
我的代码的重要部分如下所示:
sensor.ColorFrameReady += sensor_ColorFrameReady;
void sensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs colorImageFrameReadyEventArgs)
{
using (var frame = colorImageFrameReadyEventArgs.OpenColorImageFrame())
{
var bitmap = CreateBitmap(frame);
Canvas.Background = new ImageBrush(bitmap);
}
}
private static BitmapSource CreateBitmap(ColorImageFrame frame)
{
var pixelData = new byte[frame.PixelDataLength];
frame.CopyPixelDataTo(pixelData);
var stride = frame.Width * frame.BytesPerPixel;
var bitmap = BitmapSource.Create(frame.Width, frame.Height, 96, 96, PixelFormats.Bgr32, null, pixelData, stride);
return bitmap;
}
private void PictureButton_Click(object sender, RoutedEventArgs e)
{
using(var frame = sensor.ColorStream.OpenNextFrame(0))
{
var bitmap = CreateBitmap(frame);
Canvas.Background = new ImageBrush(bitmap);
}
}
Run Code Online (Sandbox Code Playgroud)
每当我运行我的应用程序时,我都会收到错误:"发生了'System.NullReferenceException'类型的未处理异常".这发生在我的BitMapSource方法的第一行.
我通过将以下if语句添加到我的BitmapSource方法来修复此问题:
private static BitmapSource CreateBitmap(ColorImageFrame frame)
{
if(frame != null)
{
var pixelData = new byte[frame.PixelDataLength];
frame.CopyPixelDataTo(pixelData);
var stride = frame.Width * frame.BytesPerPixel;
var bitmap = BitmapSource.Create(frame.Width, frame.Height, 96, 96, PixelFormats.Bgr32, null, pixelData, stride);
return bitmap;
}
else {throw new Exception();}
}
Run Code Online (Sandbox Code Playgroud)
我想检查这是否是处理此特定异常的正确方法?我注意到有些消息来源正是如此.但是,有些人说从来没有使用过throw new Exception.它是否正确?
另外,在我关注的教程中,该人运行上面的代码而没有遇到像我这样的异常(因此不需要我添加的if语句).有人知道为什么吗?VS的先前版本是否会忽略此类型的异常,还是会发生其他事情?
要回答您的第一个问题,该if (frame != null)部分是验证参数不为空的好方法.else但是,在该子句中,最好抛出一个更有意义的异常,例如:
else { throw new ArgumentNullException("frame"); }
回答第二个问题:不,以前版本的Visual Studio不会忽略NullReference异常.该教程很可能省略了一些简单/可读性(或懒惰)的错误处理.查看调用此方法的代码并尝试找出传递null的原因是个好主意frame.
根据此文档,sensor_ColorFrameReady如果数据不再可用,则可能在方法中传递null .
根据这个文档,它不应该在你的PictureButton_Click方法中返回null ,因为你传入0了milisecondsWait.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |