Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Kinect加速计数据定时器备份_C#_Timer_Kinect_Accelerometer - Fatal编程技术网

C# Kinect加速计数据定时器备份

C# Kinect加速计数据定时器备份,c#,timer,kinect,accelerometer,C#,Timer,Kinect,Accelerometer,首先,我是一名编程新手,你可能会看到,但我的问题是: 我想记录Kinects加速度计数据,并每5分钟将其写入一个文件作为备份。但我无法在Timers OnTimeEvent中获取StringBuilder数据,该数据包含我从加速计获得的数据。所以问题是,StringBuilder数据是否可以通过ElapsedEventArghs传递,或者是否有任何其他选项来访问StringBuilders数据? 我在这里复制我的代码: 命名空间KinectSokadikTeszt { 公共类反类 { 专用int

首先,我是一名编程新手,你可能会看到,但我的问题是: 我想记录Kinects加速度计数据,并每5分钟将其写入一个文件作为备份。但我无法在Timers OnTimeEvent中获取StringBuilder数据,该数据包含我从加速计获得的数据。所以问题是,StringBuilder数据是否可以通过ElapsedEventArghs传递,或者是否有任何其他选项来访问StringBuilders数据? 我在这里复制我的代码: 命名空间KinectSokadikTeszt {

公共类反类
{
专用int计数器;
公共整数计数器
{
获取{返回计数器;}
设置{counter=value;}
}
私有StringBuilder stringTemp;
公共StringBuilder StringTemp
{
获取{return stringTemp;}
设置{stringTemp=value;}
}
公共int GetCounter()
{
返回计数器;
}
}
公共课程
{
公共静态void Main(字符串[]args)
{
反课堂sz=新的反课堂();
Kinect传感器=Kinect传感器。Kinect传感器[0];
矢量4重力;
FileStream fs=newfilestream(@“c:\teszt.txt”,FileMode.Create);
fs.Close();
StreamWriter sw=新的StreamWriter(@“c:\teszt.txt”);
sz.StringTemp=新的StringBuilder();
sz.计数器=0;
定时器=新定时器();
timer.Start();
timer.eassed+=新的ElapsedEventHandler(OnTimeEvent);
定时器间隔=300000;
timer.Enabled=true;
而(深圳计数器<7500)
{
重力=传感器。加速度计目标电流读数();
DateTime dt=DateTime.Now;
WriteLine(“X:{0}\tY:{1}\tZ:{2}\t{3}.{4}”,gravity.X,gravity.Y,gravity.Z,dt,dt.毫秒);
sz.StringTemp.AppendLine(“X:+gravity.X.ToString()+”\tY:+gravity.Y.ToString()+”\tZ:+gravity.Z.ToString()+”\t“+dt+”+dt.毫秒);
sz.Counter++;
}
}
私有静态void OnTimeEvent(对象发送方,ElapsedEventArgs e)
{
软件写入(sz.StringTemp);
sw.Close();
}
}

}

您的代码无法工作有两个原因:

1) streamwriter在main中声明,它是一个局部变量,因此event OnTimeEvent无法看到它

2) 对于
反类
的指针也是如此

如果要将类指针传递给事件,必须执行以下操作:

private static void OnTimeEvent(object sender, ElapsedEventArgs e, CounterClass cz)
{
    sw.Write(sz.StringTemp);
    sw.Close();
}
将事件分配给计时器时,必须执行以下操作:

myTimer.Elapsed += new ElapsedEventHandler((sender, e) => OnTimeEvent(sender, e, cz));
编辑:您也可以使用较短的版本:

myTimer.Elapsed += (sender, e) => OnTimeEvent(sender, e, cz);
编辑2

我看过
Main(string[]args)
,我不太喜欢。如果我是你,我会这么做:

 public static void Main(string[] args)
{
    CounterClass sz = new CounterClass();
    KinectSensor sensor = KinectSensor.KinectSensors[0];
    Vector4 gravity;
    sz.StringTemp = new StringBuilder();
    sz.Counter = 0;
    Timer timer = new Timer();
    timer.Start();
    timer.Elapsed += (sender,e) => OnTimeEvent(sender,e,cz);
    timer.Interval = 300000;
    timer.Enabled = true;
    while (sz.Counter < 7500)
    {
        gravity = sensor.AccelerometerGetCurrentReading();
        DateTime dt = DateTime.Now;
        Console.WriteLine("X: {0}\tY: {1}\tZ: {2}\t{3}.{4}", gravity.X, gravity.Y, gravity.Z, dt, dt.Millisecond);
        sz.StringTemp.AppendLine("X:" + gravity.X.ToString() + "\tY:" + gravity.Y.ToString() + "\tZ:" + gravity.Z.ToString() + "\t" + dt + "." + dt.Millisecond);
        sz.Counter++;
    }

}
 private static void OnTimeEvent(object sender, ElapsedEventArgs e, CounterClass cz)
 {
    using(System.IO.StreamWriter sw=new System.IO.StreamWriter("myPath\\MyFileName.txt",true))
        sw.Write(sz.StringTemp);
 }
publicstaticvoidmain(字符串[]args)
{
反课堂sz=新的反课堂();
Kinect传感器=Kinect传感器。Kinect传感器[0];
矢量4重力;
sz.StringTemp=新的StringBuilder();
sz.计数器=0;
定时器=新定时器();
timer.Start();
timer.appead+=(发送方,e)=>ontimeent(发送方,e,cz);
定时器间隔=300000;
timer.Enabled=true;
而(深圳计数器<7500)
{
重力=传感器。加速度计目标电流读数();
DateTime dt=DateTime.Now;
WriteLine(“X:{0}\tY:{1}\tZ:{2}\t{3}.{4}”,gravity.X,gravity.Y,gravity.Z,dt,dt.毫秒);
sz.StringTemp.AppendLine(“X:+gravity.X.ToString()+”\tY:+gravity.Y.ToString()+”\tZ:+gravity.Z.ToString()+”\t“+dt+”+dt.毫秒);
sz.Counter++;
}
}
私有静态void OnTimeEvent(对象发送方、ElapsedEventArgs e、反类cz)
{
使用(System.IO.StreamWriter sw=new System.IO.StreamWriter(“myPath\\MyFileName.txt”,true))
软件写入(sz.StringTemp);
}
如果将StreamWriter中的bool设置为true,它将在文件末尾追加字符串。如果文件不存在,布尔值将被丢弃,streamwriter将创建该文件。
有关StreamWriter的更多信息,请查看

@DánielNagy不客气。但是请阅读规则,因为在这个网站上禁止写“我喜欢它”、“非常感谢”等等。。。祝你有美好的一天,
 public static void Main(string[] args)
{
    CounterClass sz = new CounterClass();
    KinectSensor sensor = KinectSensor.KinectSensors[0];
    Vector4 gravity;
    sz.StringTemp = new StringBuilder();
    sz.Counter = 0;
    Timer timer = new Timer();
    timer.Start();
    timer.Elapsed += (sender,e) => OnTimeEvent(sender,e,cz);
    timer.Interval = 300000;
    timer.Enabled = true;
    while (sz.Counter < 7500)
    {
        gravity = sensor.AccelerometerGetCurrentReading();
        DateTime dt = DateTime.Now;
        Console.WriteLine("X: {0}\tY: {1}\tZ: {2}\t{3}.{4}", gravity.X, gravity.Y, gravity.Z, dt, dt.Millisecond);
        sz.StringTemp.AppendLine("X:" + gravity.X.ToString() + "\tY:" + gravity.Y.ToString() + "\tZ:" + gravity.Z.ToString() + "\t" + dt + "." + dt.Millisecond);
        sz.Counter++;
    }

}
 private static void OnTimeEvent(object sender, ElapsedEventArgs e, CounterClass cz)
 {
    using(System.IO.StreamWriter sw=new System.IO.StreamWriter("myPath\\MyFileName.txt",true))
        sw.Write(sz.StringTemp);
 }