创建一个停止按钮,以便在c#windows窗体应用程序中停止录制

时间:2015-12-07 12:00:10

标签: c# windows record

我有一个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。但是这种方法不起作用。

1 个答案:

答案 0 :(得分:1)

您每次都在创建一个全新的对象,它只在本地/存在于Click处理函数的范围内。

obj中的button5_Clickcapt中的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();
}