C# 如何忽略异常

C# 如何忽略异常,c#,exception,kinect,kinect-sdk,C#,Exception,Kinect,Kinect Sdk,我正在用C#编写kinect应用程序,我有以下代码 try //start of kinect code { _nui = new Runtime(); _nui.Initialize(RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseColor); // hook up our events for vid

我正在用C#编写kinect应用程序,我有以下代码

try             //start of kinect code
{
    _nui = new Runtime();
    _nui.Initialize(RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseColor);

    // hook up our events for video
    _nui.DepthFrameReady += _nui_DepthFrameReady;
    _nui.VideoFrameReady += _nui_VideoFrameReady;

    // hook up our events for skeleton
    _nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(_nui_SkeletonFrameReady);

    // open the video stream at the proper resolution
    _nui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution320x240, ImageType.DepthAndPlayerIndex);
    _nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color);

    // parameters used to smooth the skeleton data
    _nui.SkeletonEngine.TransformSmooth = true;
    TransformSmoothParameters parameters = new TransformSmoothParameters();
    parameters.Smoothing = 0.8f;
    parameters.Correction = 0.2f;
    parameters.Prediction = 0.2f;
    parameters.JitterRadius = 0.07f;
    parameters.MaxDeviationRadius = 0.4f;
    _nui.SkeletonEngine.SmoothParameters = parameters;

    //set camera angle
    _nui.NuiCamera.ElevationAngle = 17;
}
catch (System.Runtime.InteropServices.COMException)
{
    MessageBox.Show("Could not initialize Kinect device.\nExiting application.");
    _nui = null;

}
尝试//启动kinect代码
{
_nui=新运行时();
_numi.Initialize(RuntimeOptions.UseSkeletalTracking | RuntimeOptions.usedephthandplayerindex | RuntimeOptions.UseColor);
//把我们的活动录下来
_nui.DepthFrameReady+=\u nui\u DepthFrameReady;
_nui.VideoFrameReady+=\u nui\u VideoFrameReady;
//将我们的活动与骷髅联系起来
_nui.SkeletonFrameReady+=新事件处理程序(_nui_SkeletonFrameReady);
//以适当的分辨率打开视频流
_nui.DepthStream.Open(ImageStreamType.Depth,2,ImageResolution.Resolution320x240,ImageType.DepthandPayerIndex);
_打开(ImageStreamType.Video,2,ImageResolution.Resolution640x480,ImageType.Color);
//用于平滑骨架数据的参数
_nui.SkeletonEngine.TransformSmooth=true;
TransformSmoothParameters=新TransformSmoothParameters();
参数。平滑=0.8f;
参数。校正=0.2f;
参数。预测=0.2f;
parameters.jittradius=0.07f;
parameters.MaxDeviationRadius=0.4f;
_nui.SkeletonEngine.SmoothParameters=参数;
//设置摄像机角度
_nui.NuiCamera.ElevationAngle=17;
}
捕获(System.Runtime.InteropServices.COMException)
{
MessageBox.Show(“无法初始化Kinect设备。\n正在初始化应用程序”);
_nui=null;
}

我正在寻找一种方法,使我的应用程序在kinect未连接时不会崩溃(例外情况将被忽略)。我提出了另一个问题,但解决方案无法应用于我的场合,因为我被迫使用过时的sdk,没有人能解决这个问题,所以我尝试使用不同的方法。我如何可以忽略此异常?(我可以在事后撤销对_nui本人所做的更改)

如果您想忽略所有异常:

try 
{
// your code... 
} 
catch (Exception E)
{ 
// whatever you need to do...
};
以上是一个包罗万象(尽管有些异常不能像Stackoverflow那样被捕获)

备注


您不应使用上述。。。您应该找出抛出的异常类型并捕获它

如果要忽略所有异常:

try 
{
// your code... 
} 
catch (Exception E)
{ 
// whatever you need to do...
};
以上是一个包罗万象(尽管有些异常不能像Stackoverflow那样被捕获)

备注


您不应使用上述。。。您应该找出抛出的异常类型并捕获它

当前,您正在捕获所有ComException。如果要捕获其他异常,则需要为每个异常提供特定类型

您可以在catch块之后添加异常类型,如下所示:

    catch (System.Runtime.InteropServices.COMException)
    {
        MessageBox.Show("Could not initialize Kinect device.\nExiting application.");
        _nui = null;

    } catch (Exception ex) //this will catch generic exceptions.
    {

    }  
如果您希望代码在捕获之后执行,不管发生什么。您也可以尝试使用

像这样

try
{
  //logic
}
finally
{
  //logic. This will be executed and then the exception will be catched
}

目前,您正在捕获所有ComException。如果要捕获其他异常,则需要为每个异常提供特定类型

您可以在catch块之后添加异常类型,如下所示:

    catch (System.Runtime.InteropServices.COMException)
    {
        MessageBox.Show("Could not initialize Kinect device.\nExiting application.");
        _nui = null;

    } catch (Exception ex) //this will catch generic exceptions.
    {

    }  
如果您希望代码在捕获之后执行,不管发生什么。您也可以尝试使用

像这样

try
{
  //logic
}
finally
{
  //logic. This will be executed and then the exception will be catched
}

要忽略的抛出的异常是什么?乍一看,上面的代码似乎应该忽略该代码块中抛出的任何
COMException
,但如果在其他地方访问,则不能说明以后可能不会抛出空引用异常。这实际上取决于异常是什么。你只能“忽略”对你的代码逻辑不重要的异常。这部分代码之后的整个关键点都可以由我来处理(我已经想过了),关键是我需要我的应用程序通过这部分代码,无论我在catch括号中放了什么,应用程序都会继续崩溃(抛出异常)对吗there@macrian,什么例外?ComException?如果我阅读正确,是的,有没有办法让我确切地知道在没有断点的情况下引发异常的位置?引发的异常是什么,您希望忽略?乍一看,上面的代码似乎应该忽略该代码块中抛出的任何
COMException
,但如果在其他地方访问,则不能说明以后可能不会抛出空引用异常。这实际上取决于异常是什么。你只能“忽略”对你的代码逻辑不重要的异常。这部分代码之后的整个关键点都可以由我来处理(我已经想过了),关键是我需要我的应用程序通过这部分代码,无论我在catch括号中放了什么,应用程序都会继续崩溃(抛出异常)对吗there@macrian,什么例外?ComException?如果我阅读正确是的,有没有办法让我准确地知道在没有断点的情况下引发异常的位置?不起作用,我也不知道为什么。这是一个System.Windows.Markup.XamlParseException。有没有办法找到异常抛出的确切位置?也许这发生在代码之外的其他地方。我怎样才能找到答案???@macrian您可以告诉visual studio调试器在抛出异常时中断;这可以使某些类型的异常抛出异步操作更容易处理。当然,在这种特殊情况下,它可能对您没有帮助。看看“调试”菜单下的“异常…”选项。不工作,我不知道为什么。这是一个System.Windows.Markup.XamlParseException。有没有办法找到异常抛出的确切位置?也许这发生在代码之外的其他地方。我怎样才能找到答案???@macrian您可以告诉visual studio调试器在抛出异常时中断;这可以使某些类型的异常抛出异步操作更容易处理。当然,在这种特殊情况下,它可能对您没有帮助。看看“调试”菜单下的“异常…”选项。不工作,我不知道为什么。这是一个System.Windows.Markup.XamlParseException。有没有办法找到异常抛出的确切位置?也许这发生在某个地方