0

タイトルが紛らわしくて申し訳ありませんが、音声を 5 秒間録音してから close 関数を実行しようとしています。

私はちょうどこのようにそれを行うと思った

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

ただし、スレッドがスリープしている間も記録されないため、これは機能しません。

次に、新しいスレッドを作成して、sleep 関数と stop 関数を実行するかどうかを考えました。理にかなっています。

誰かがこれを修正する方法を知っているなら、私に知らせてください

4

3 に答える 3

0

を使用する必要がありますTimerSystem.Threading.Timer.NETには、、、System.Timers.Timerおよびの3つのタイマーがありますSystem.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 に答える
0

別のスレッドでそれを行うというあなたの考えは正しいです(タイマーがあなたのためにこれの仕事をするので、あなたはタイマーを調べたいかもしれませんが)。

私はC#-erではありませんが、記録を停止するために探しているのは同期メソッドと呼ばれるものだと思います。このページはあなたを正しい方向に向けるべきです。

于 2012-08-16T14:36:30.883 に答える
0

考えられる解決策の1つは次のとおりです。

  • 録音を開始
  • タイマーを開始し(100msごとに問題ない可能性があります)、設定しますDateTime startTime = DateTime.Now
  • タイマーイベントが発生(DateTime.Now - startTime)したら、それが5000ms以上であるかどうかを確認します。発生した場合は、タイマーを停止し、記録を停止します。

これにより、画面にデクリメントタイマーを設定することができます。
簡単にしたい場合は、5秒の遅延でタイマーを実行し、タイマーイベントで、それを停止して記録を停止することができます。

于 2012-08-16T14:36:53.330 に答える