我写了一个简单的秒表应用程序,需要在一定时间间隔内播放声音警报。声音警报需要在15分钟标记,30分钟标记和1小时标记处播放。我已经设置了应用程序启动时播放的声音文件,但是我已经找到了如何让它在这些时间间隔播放的问题。下面的代码是代码的秒表部分 另请注意,我没有在此版本的代码中初始化声音。任何帮助将不胜感激。
using System;
using System.Diagnostics;
using System.IO;
using System.Media;
using System.Security.Cryptography.X509Certificates;
using System.Windows.Forms;
namespace CiscoSw
{
public partial class SwForm : Form
{
private readonly Stopwatch _sw = new Stopwatch();
internal SwForm()
{
InitializeComponent();
startBtn.Text = @"Start";
UpdateDisplay();
}
private void SwForm_Load(object sender, EventArgs e)
{
currentTimeUtc.Start();
}
private void startBtn_Click(object sender, EventArgs e)
{
if (!_sw.IsRunning)
{
_sw.Start();
stopwatchTimer.Start();
startBtn.Text = @"Stop";
UpdateDisplay();
}
else
{
_sw.Stop();
stopwatchTimer.Stop();
startBtn.Text = @"Start";
}
}
private void resetBtn_Click(object sender, EventArgs e)
{
if (_sw.IsRunning)
{
_sw.Restart();
}
else
{
_sw.Reset();
}
UpdateDisplay();
}
internal void stopwatchTimer_Tick(object sender, EventArgs e)
{
UpdateDisplay();
}
private void UpdateDisplay()
{
stopwatchTimeLabel.Text =
$"{_sw.Elapsed.Hours.ToString("00")}:{_sw.Elapsed.Minutes.ToString("00")}:{_sw.Elapsed.Seconds.ToString("00")}";
}
private void currentTimeUtc_Tick(object sender, EventArgs e)
{
var now = DateTime.UtcNow;
displayCurrentTime.Text = $"{now:M/d/yyyy HHmm Zulu}";
}
}
}
此代码用于播放声音。现在我只在资源中有一个声音文件,一旦我正常工作,我将添加其他。此代码位于项目的单独文件中。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Media;
using System.Text;
using System.Threading.Tasks;
using static System.DateTime;
namespace CiscoSw
{
public class TimerSound
{
public virtual void TimerSoundPlay()
{
var fifteenminSound = new SoundPlayer(Properties.Resources.ResourceManager.GetObject("fifteenminutes") as Stream);
fifteenminSound.Play();
}
}
}
答案 0 :(得分:1)
一种选择是与秒表并行使用Timer,并在15分钟或任何时间间隔过去时在计时器上引发事件。在那个事件上发出声音。但是,您无法直接使用秒表附加事件
答案 1 :(得分:1)
这应该有效。我没有测试过代码。我使用System.Windows.Forms.Timer
编辑:我刚用较短的时间间隔对其进行测试,效果很好。我还将MakeSound调用移动到事件的结尾,以便它不会阻止重置计时器。
Timer Timer15 = new Timer();
Timer Timer30 = new Timer();
Timer Timer60 = new Timer();
public void SetupTimers()
{
Timer15.Interval = 15 * 60 * 1000;
Timer30.Interval = 30 * 60 * 1000;
Timer60.Interval = 60 * 60 * 1000;
Timer15.Tick += Timer_Tick;
Timer30.Tick += Timer_Tick;
Timer60.Tick += Timer_Tick;
Timer15.Enabled = true;
Timer30.Enabled = true;
Timer60.Enabled = true;
}
void Timer_Tick(object sender, EventArgs e)
{
Timer timer = sender as Timer;
// Unsubscribe from the current event. Prevents multuple subscriptions.
timer.Tick -= Timer_Tick;
// If 60 minutes then reset all timers.
if (timer.Interval == 60 * 60 * 1000)
{
SetupTimers();
}
//Call sound method here.
MakeSound();
}