2015-04-21 206 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();