我有一个Windows窗体应用程序,其中包含两个按钮,记录和停止记录。当按下记录按钮时,将创建一个类捕获对象,并调用一个捕获kinect流的函数,该函数连续存储该流:
while (scanner.TryNext() && flag == false)
{
// the stream store as long as flag is false
}
我想要创建第二个按钮,其中的标志将取值为true以便停止记录。但是,我注意到,如果我在另一个对象中更改类的值,则该标志不会更改在第一个对象中调用的方法中的值,并且记录仍会发生。因此,我想知道两个对象如何进行通信以停止流的记录。
private void button5_Click(object sender, EventArgs e)
{
Capturer obj = new Capturer(dirPath + "Crathan", 20); // the record begins
}
private void button3_Click(object sender, EventArgs e)
{
Capturer capt = new Capturer();
capt.flag = true;
}
不同的构造函数将false的标志的默认值更改为true。但是这种方法行不通。
您每次都创建一个全新的对象,该对象是本地的,仅在单击处理程序函数的范围内存在。
该obj
在button5_Click
从完全不同capt
的button3_click
。
您需要做的是将对象的引用保存在某个地方(肯定是包含类的私有字段),这两个方法都可以访问同一对象。
例如:
private Capturer _capturer;
private void button5_Click(object sender, EventArgs e)
{
_capturer= new Capturer(dirPath + "Crathan", 20); // the record begins
}
private void button3_Click(object sender, EventArgs e)
{
_capturer.flag = true;
}
为了获得更好的设计,请不要在单击发生时创建Capturer(否则,有人可能会在_capturer初始化之前单击停止按钮)。
更好的方法是使用相关参数在类构造器中构造它,然后有一个方法开始捕获,然后停止捕获。
void MyClass()
{
_capturer = new Capturer(dirPath + "Crathan", 20);
}
private void button5_Click(object sender, EventArgs e)
{
_capture.Start();
}
private void button3_Click(object sender, EventArgs e)
{
_capturer.Stop();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句