2015-04-21 33 views
1

我目前正在尝试使用c#WinForms中的kinect传感器创建战舰游戏。我已经掌握了所有的基础知识,并且一直试图在我的项目中实现一个类,该类将骨架数据转换为我可以用来控制鼠标的东西。我一直在关注我在网上找到的一些示例代码,但遇到了Stopwatches的一个大问题。随着我的代码,我打电话秒表抛出空异常

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Coding4Fun.Kinect.Wpf; 
using Microsoft.Kinect; 
using System.Windows.Forms; 
using System.Diagnostics; 
using System.Drawing; 
using System.Windows; 

namespace TCP_Server 
{ 
    class motionClass 
    { 
     //other objects are declared in here as well. 
     private readonly Stopwatch _clickHoldingTimer; 

和我的错误输出窗口,我得到如下:

字段“TCP_Server.motionClass._clickHoldingTimer”从未分配,始终将其默认值为空

秒表的目的是确定用户做出抓取动作的时间长度,并且如果它已被保持一段时间,则执行鼠标点击操作。

如果我运行程序到我的motionClass是只要它看到的骨架在被跟踪,并运行到第一次调用秒表的帧而被初始化,这一点,我抛出一个nullValueException。

为什么秒表会抛出这个异常,并且有什么办法解决它吗?如果需要,我可以提供更多代码并显示引发异常的位置。

+0

显示您使用秒表的代码...我们只能猜测您所显示的内容。 –

+2

警告的哪部分你不明白? – SLaks

+0

我想你不会在任何地方初始化StopWatch对象。只要确保在构造函数 – Peyman

回答

1

我曾试图改变我的代码

private readonly Stopwatch _clickHoldingTimer = new Stopwatch(); 

但仍然向我抛出错误。我刚刚尝试的是关闭并重新启动Visual Studio,使用此代码而不是我最初的代码,并且它自己修复了。

+0

通常,当你得到“xyz永远不会分配给”警告时,简单的重新启动不能解决它。 –

+0

你现在已经“新”了秒表;但你仍然需要实际使用它。请阅读MSDN上关于秒表的方法和属性,了解如何使用它。也就是说,在你的第一篇文章中你有一个秒表的概念,但没有一个;现在你的口袋里有一个,但你真正想做的就是使用它 – andrew

0

你的变量显然是声明的,但从来没有“new'd”,声明一个变量只是定义它的类型,但变量不是object,直到它被实例化。如果您显示的代码是唯一使用此变量的地方,那么请删除不需要/使用的声明。

为了使用秒表对象你需要有这一行执行(或类似的东西):

_clickHoldingTimer = new StopWatch();