c#中的闹钟

本文关键字:闹钟 | 更新日期: 2023-09-27 18:11:46

我有一个想法,用c#构建一个闹钟,具有以下特性

  1. 显示当天的待办事项列表
  2. 从选定的歌曲列表中播放歌曲

已经完成的功能

    显示待办事项列表
  1. 播放歌曲
  2. 显示时间间隔

    private void Form1_Load(object sender, EventArgs e)
    {
        Timer MyTimer = new Timer();
        MyTimer.Interval = (1 * 60 * 1000); // 1 mins
        MyTimer.Tick += new EventHandler(MyTimer_Tick);
        MyTimer.Start();
    }
    private void MyTimer_Tick(object sender, EventArgs e)
    {
        WakeUpProcess();
    }
    private void WakeUpProcess()
    {
        StreamReader CurrentAgenda = new StreamReader("C:/Users/Max/documents/visual studio 2015/Projects/Advanced_AlarmClock/Advanced_AlarmClock/File Resources/Todays Agenda.txt");
        TimeSpan start = new TimeSpan(06, 50, 0); //10 o'clock
        TimeSpan end = new TimeSpan(07, 00, 0); //12 o'clock
        TimeSpan now = DateTime.Now.TimeOfDay;
        System.IO.StreamReader CurrentAgendaRaw = new System.IO.StreamReader("C:/Users/Max/documents/visual studio 2015/Projects/Advanced_AlarmClock/Advanced_AlarmClock/File Resources/Todays Agenda.txt");
        string CurrentAgendaTxt = CurrentAgendaRaw.ReadToEnd();
        if ((now > start) && (now < end))
        {
            this.WindowState = FormWindowState.Normal;
            Output.Text = ("Good Morning Max" + Environment.NewLine + CurrentAgendaTxt);            
            Process.Start("C:/Users/Max/Downloads/Juice Newton - Angel Of The Morning.mp3");
        }
    }
    

然而,我需要一些解决我面临的问题的方法。-每次达到时间要求(在6:50到7:00之间),都会打开一个新的歌曲实例。我只需要打开一个实例。-如果可能的话,谁能帮我弄一下如何让程序唤醒电脑?

谢谢,Maximus

c#中的闹钟

作为一种快速的解决方案,如果警报之前是否被触发过,您可以保持bool状态。

bool alarmTriggered = false;
private void WakeUpProcess()
{
    StreamReader CurrentAgenda = new StreamReader("C:/Users/Max/documents/visual studio 2015/Projects/Advanced_AlarmClock/Advanced_AlarmClock/File Resources/Todays Agenda.txt");
    TimeSpan start = new TimeSpan(06, 50, 0); //10 o'clock
    TimeSpan end = new TimeSpan(07, 00, 0); //12 o'clock
    TimeSpan now = DateTime.Now.TimeOfDay;
    System.IO.StreamReader CurrentAgendaRaw = new System.IO.StreamReader("C:/Users/Max/documents/visual studio 2015/Projects/Advanced_AlarmClock/Advanced_AlarmClock/File Resources/Todays Agenda.txt");
    string CurrentAgendaTxt = CurrentAgendaRaw.ReadToEnd();
    if ((now > start) && (now < end) && !alarmTriggered)
    {
        alarmTriggered = true;
        this.WindowState = FormWindowState.Normal;
        Output.Text = ("Good Morning Max" + Environment.NewLine + CurrentAgendaTxt);            
        Process.Start("C:/Users/Max/Downloads/Juice Newton - Angel Of The Morning.mp3");
        }
    }
    else {
        alarmTriggered = false;
    }
}

PS:如果你想继续你的应用程序,评论中提出的库是一个更好的方法。

PS2:我假设你只是在尝试周围的东西,这个应用程序应该运行多天,否则删除事件监听器是迄今为止最好的选择。

您正在使用Process.Start播放歌曲,并将其留在那里。

您可以尝试使用Process.Start的返回值来检查进程是否仍在运行,甚至杀死它。

此外,如果你使用库来播放mp3,你可能会得到更好的服务。这样你就可以更好地控制它的播放时间。

选项包括:

  • WMPLib (for Windows, Microsoft Eula)
  • NAudio (for Windows, Ms-PL)
  • DirectShow (for Windows, LGPL)
  • irrKlang(适用于Windows, Linux和Mac,免费用于非商业用途)
  • 阿尔瓦。音频(用于Windows,付费,不可用)

注意:也有OpenAL通过OpenTK或Monogame,但你可能不需要任何3D的东西。