0

如果标题令人困惑,我很抱歉,但我正在尝试录制 5 秒钟的音频,然后运行关闭功能。

我想我只是这样做

StartFunction();
Thread.Sleep(5000);
StopFunction();

但这不起作用,因为它在线程休眠时也不会记录。

然后我想,如果我创建一个新线程,可以在其中执行睡眠和停止功能。但是当我这样做并尝试运行停止功能时,它似乎不再停止,因为它试图停止另一个线程中的记录,如果那样的话说得通。

所以如果有人知道我该如何解决这个问题,请告诉我

4

3 回答 3

0

您在不同线程中执行此操作的想法是正确的(尽管您可能想查看timers,因为它们会为您完成这项工作)。

我不是 C#-er,但我相信您正在寻找停止录制的方法称为同步方法。此页面应为您指明正确的方向。

于 2012-08-16T14:36:30.883 回答
0

一种可能的解决方案是:

  • 开始录音
  • 启动一个计时器(每 100 毫秒可以)并设置DateTime startTime = DateTime.Now
  • 当定时器事件引发时,检查(DateTime.Now - startTime)它是否 >= 5000ms:如果是,则停止定时器并停止录制

这使您可以在屏幕上设置递减计时器。
如果你想让它更容易,你可以运行一个延迟 5 秒的计时器,并在计时器事件时停止它并停止录制。

于 2012-08-16T14:36:53.330 回答
0

您需要使用Timer. .NET 中有三个计时器System.Threading.TimerSystem.Timers.TimerSystem.Windows.Forms.Timer.

只有后者可以向您保证它将在同一个线程中运行。为此,您需要一个 Windows 应用程序。

Class MyClass
{
    Timer timer = new Timer();

    public MyClass()
    {
        timer.Tick += new EventHandler(timer_Tick);
        timer.Interval = 5000;
    }

    void Record()
    {
        StartFunction();
        timer.Start();        
    }

    void timer_Tick(object sender, EventArgs e)
    {
         timer.Stop();
         StopFunction();
    }
}
于 2012-08-16T14:41:14.097 回答