自定义事件处理程序的问题 class
Issue with EventHandler of a custom class
我正在从事一个旨在解释手指字母表某些部分的项目。为此,我正在使用 Kinect v1 和这两个项目:Lightbuzz.Vitruvius provides the main funcionality and Lightbuzz.Vitruvius.Fingertracking 检测指尖的能力(至少到目前为止是理论)。
将这两者结合在一起比挑战更乏味,但真正的挑战来自 EventHandler。您会看到有一个 HandController class 可以检测并显示手指。在这个 class 中是一个启动检测的 EventHandler。
适当更改所有内容后,Rider 现在报告此错误(我使用的是 .NET Framework 4.0):
<LightBuzz.Vitruvius>\HandsController.cs:1706 The type 'LightBuzz.Vitruvius.HandCollection' must be convertible to 'System.EventArgs' in order to use it as parameter 'TEventArgs' in the generic delegate 'void System.EventHandler<TEventArgs>(object, TEventArgs)'
下面是EventHandler和要执行的代码:
public event EventHandler<HandCollection> HandsDetected;
private void HandsController_HandsDetected(object sender, HandCollection e)
{
// Display the results!
if (e.HandLeft != null)
{
// Draw contour.
foreach (var point in e.HandLeft.ContourDepth)
{
kinectViewer.DrawEllipse(point, Brushes.Green, 2.0);
}
// Draw fingers.
foreach (var finger in e.HandLeft.Fingers)
{
kinectViewer.DrawEllipse(finger.DepthPoint, Brushes.White, 4.0);
}
}
if (e.HandRight != null)
{
// Draw contour.
foreach (var point in e.HandRight.ContourDepth)
{
kinectViewer.DrawEllipse(point, Brushes.Blue, 2.0);
}
// Draw fingers.
foreach (var finger in e.HandRight.Fingers)
{
kinectViewer.DrawEllipse(finger.DepthPoint, Brushes.White, 4.0);
}
}
}
// The object HandCollection is a seperate class as follows:
public partial class HandCollection
{
/// <summary>
/// The tracking ID of the current body.
/// </summary>
public int TrackingId { get; set; }
/// <summary>
/// The left hand data of the current body.
/// </summary>
public Hand HandLeft { get; set; }
/// <summary>
/// The right hand data of the current body.
/// </summary>
public Hand HandRight { get; set; }
}
我现在的问题是这个错误是什么意思,我该如何解决?我对 C# 的使用方法和内容的了解相对较少,所以请保持温和。我还发现将框架切换到 4.5 版可以解决这个问题,但还会产生更多问题。
如错误所示,您的 HandCollection
class 不能用作事件处理程序委托中的参数。您可能有使用 .Net 4.0 的原因,因此请尝试使 class 继承自 System.EventArgs
并查看是否可行。否则我会建议切换框架。
我正在从事一个旨在解释手指字母表某些部分的项目。为此,我正在使用 Kinect v1 和这两个项目:Lightbuzz.Vitruvius provides the main funcionality and Lightbuzz.Vitruvius.Fingertracking 检测指尖的能力(至少到目前为止是理论)。
将这两者结合在一起比挑战更乏味,但真正的挑战来自 EventHandler。您会看到有一个 HandController class 可以检测并显示手指。在这个 class 中是一个启动检测的 EventHandler。
适当更改所有内容后,Rider 现在报告此错误(我使用的是 .NET Framework 4.0):
<LightBuzz.Vitruvius>\HandsController.cs:1706 The type 'LightBuzz.Vitruvius.HandCollection' must be convertible to 'System.EventArgs' in order to use it as parameter 'TEventArgs' in the generic delegate 'void System.EventHandler<TEventArgs>(object, TEventArgs)'
下面是EventHandler和要执行的代码:
public event EventHandler<HandCollection> HandsDetected;
private void HandsController_HandsDetected(object sender, HandCollection e)
{
// Display the results!
if (e.HandLeft != null)
{
// Draw contour.
foreach (var point in e.HandLeft.ContourDepth)
{
kinectViewer.DrawEllipse(point, Brushes.Green, 2.0);
}
// Draw fingers.
foreach (var finger in e.HandLeft.Fingers)
{
kinectViewer.DrawEllipse(finger.DepthPoint, Brushes.White, 4.0);
}
}
if (e.HandRight != null)
{
// Draw contour.
foreach (var point in e.HandRight.ContourDepth)
{
kinectViewer.DrawEllipse(point, Brushes.Blue, 2.0);
}
// Draw fingers.
foreach (var finger in e.HandRight.Fingers)
{
kinectViewer.DrawEllipse(finger.DepthPoint, Brushes.White, 4.0);
}
}
}
// The object HandCollection is a seperate class as follows:
public partial class HandCollection
{
/// <summary>
/// The tracking ID of the current body.
/// </summary>
public int TrackingId { get; set; }
/// <summary>
/// The left hand data of the current body.
/// </summary>
public Hand HandLeft { get; set; }
/// <summary>
/// The right hand data of the current body.
/// </summary>
public Hand HandRight { get; set; }
}
我现在的问题是这个错误是什么意思,我该如何解决?我对 C# 的使用方法和内容的了解相对较少,所以请保持温和。我还发现将框架切换到 4.5 版可以解决这个问题,但还会产生更多问题。
如错误所示,您的 HandCollection
class 不能用作事件处理程序委托中的参数。您可能有使用 .Net 4.0 的原因,因此请尝试使 class 继承自 System.EventArgs
并查看是否可行。否则我会建议切换框架。