2016-10-05 2 views
0

у меня была идея построить будильник в C# со следующими особенностямиБудильник в 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), открывается новый экземпляр. Мне нужен только один экземпляр. - Также мог бы кто-нибудь понять меня, как бы я мог заставить программу разбудить компьютер, если это возможно.

Спасибо, Maximus

+0

Просто, чтобы проверить, правильно ли я понял.Единственная причина, по которой вы проверяете, находится ли «сейчас» между окончанием и запуском, является то, что когда «Tick» попадает между вами, вы хотите выполнить этот код один раз. Я прав? – fsschmitt

+0

Да, я не мог работать иначе. – Maximus

+0

Используйте библиотеку, чтобы обрабатывать время для вас, как [Quartz.NET] (https://www.nuget.org/packages/Quartz), он делает такие вещи, как сигналы тревоги, в 100 раз проще , –

ответ

0

В качестве быстрого решения, которое вы можете сохранить на 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: Я предполагаю, что вы просто пытаетесь найти что-то вокруг и что это приложение должно работать несколько дней, в противном случае удаление прослушивателя событий - лучший выбор на сегодняшний день.

0

Вы используете 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, платный, приватный)

Примечание: есть также OpenAL через OpenTK или Monogame, но вы, вероятно, не теряете какой-либо 3D-материал.

+0

Спасибо за помощь, увидим, какие из них работают лучше всего: D – Maximus

Смежные вопросы