【问题标题】:Alarm Clock in C#C#中的闹钟
【发布时间】:2017-02-14 09:11:51
【问题描述】:

我有一个想法,用 c# 构建一个具有以下功能的闹钟

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

我已经完成的功能

  1. 显示待办事项列表
  2. 播放歌曲
  3. 在特定时间之间显示表格

    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 之间),都会打开歌曲的新实例。我只想打开一个实例。 - 如果可能的话,有人可以帮助我如何让程序唤醒计算机。

谢谢你,马克西姆斯

【问题讨论】:

  • 只是为了检查我是否理解正确。您检查“现在”是否在结束和开始之间的唯一原因是,当“滴答”在该时间之间命中时,您想执行该代码一次。我说的对吗?
  • 是的,我想不出其他办法
  • Quartz.NET 一样使用库来为您处理时间,它使警报等事情变得容易100 倍。
  • 很多其他方法可以做你正在做的事情,有些可能更好,但要回答你的问题:MyTimer.Tick -= MyTimer_Tick; 删除处理程序。
  • 另一种选择是在此程序中执行您需要的操作,并使用 Windows 任务计划程序安排 .exe。

标签: c# clock alarm


【解决方案1】:

作为一种快速解决方案,如果警报之前已触发,您可以保持布尔值。

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:我假设你只是在尝试一些东西,并且这个应用程序应该运行多天,否则删除事件侦听器是迄今为止最好的选择。

【讨论】:

    【解决方案2】:

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

    你可以尝试使用Process.Start的返回值到check if the process is still running,甚至是kill它。

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

    一些选项包括:

    • WMPLib(适用于 Windows、Microsoft Eula)
    • NAudio(对于 Windows,Ms-PL)
    • DirectShow(适用于 Windows、LGPL)
    • irrKlang(适用于 Windows、Linux 和 Mac,非商业用途免费)
    • Alvas.Audio(适用于 Windows,付费,私有)

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

    【讨论】:

    • 感谢您的帮助,看看哪个效果最好:D
    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多