我有一个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。但是这种方法不起作用。
答案 0 :(得分:1)
您每次都在创建一个全新的对象,它只在本地/存在于Click处理函数的范围内。
obj
中的button5_Click
与capt
中的button3_click
完全不同。
你需要做的是在某个地方保存对象的引用(almsot当然是包含类的私有字段),其中两个方法都可以访问相同的对象。
例如:
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();
}