1

私は 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 が接続されていないときにアプリがクラッシュしないようにする方法を探しています (例外は無視されます)。ここで別の質問を作成しましたが、古いSDKを使用せざるを得ず、誰もその質問を解決できないため、解決策を私の機会に適用できなかったため、別のアプローチを使用しようとしています. この例外を無視するにはどうすればよいですか? (後で _nui に加えた変更を元に戻すことができます)

4

2 に答える 2

1

現在、すべての ComExceptions をキャッチしています。他の例外をキャッチする場合は、例外ごとに特定の型を指定する必要があります。

次のように、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
}
于 2012-11-13T17:28:21.323 に答える
0

すべての例外を無視する場合:

try 
{
// your code... 
} 
catch (Exception E)
{ 
// whatever you need to do...
};

上記はキャッチオールです (ただし、一部の例外は Stackoverflow のようにキャッチできません)。

述べる

上記を使用しないでください...どのような種類の例外がスローされたかを調べて、それをキャッチする必要があります!

于 2012-11-13T17:27:45.457 に答える