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