Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2018, 09:46   #1
vasypu
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 24
По умолчанию вроде бы все верно, но мелодия почему то не играет, ошибки не выдает, что может быть не так?

Код:
if ((DateTime.Now.Hour == 9) && (DateTime.Now.Minute == 42))
            {
                Console.WriteLine("Сейчас:"+DateTime.Now.Hour+":"+DateTime.Now.Minute);
                 
         MediaPlayer player = new MediaPlayer();
        player.Open(new Uri(@"Desktop\miyagi_and_endshpil_-_feya_(zaycev.net).mp3", UriKind.Relative));
         player.Play();
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 02.09.2018 в 10:53.
vasypu вне форума Ответить с цитированием
Старый 02.09.2018, 11:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы начал с того, что убрал проверку и указал ПОЛНЫЙ путь к файлу:
например:

Код:
       Console.WriteLine("Сейчас:"+DateTime.Now.Hour+":"+DateTime.Now.Minute);
                 
        MediaPlayer player = new MediaPlayer();
        player.Open(new Uri(@"D:\music\miyagi_and_endshpil_-_feya_(zaycev.net).mp3", UriKind.Absolute));
         player.Play();
файл mp3 нужно скопировать предварительно в указанную в коде папку.

Если MediaPlayer отработает (кстати, а он вообще в консольном приложении должен работать?),
тогда последовательно вернуть сначала проверку на время и проверить.
Потом уже разбираться с относительным путём.
С относительным путём надо быть очень осторожным - даже если ваша программа EXE лежит на рабочем столе и там же, на рабочем столе лежит ваш mp3 файл, то совсем не обязательно, что текущая папка запуска программы является именно рабочий стол.
Если так уж нужны именно относительные пути, то я бы предложил положить mp3 и EXE в одну папку и в коде получать путь EXE и уже от него брать путь к MP3 - это будет намного надёжнее.

p.s. и если у Вас бесконечный цикл do {} while (true); - как в прошлой теме - то нужно это цикл убрать. Так делать нельзя!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.09.2018, 11:14   #3
vasypu
Пользователь
 
Регистрация: 21.08.2018
Сообщений: 24
По умолчанию

почему нельзя использовать цикл do{}while(true), в данном случае?)
vasypu вне форума Ответить с цитированием
Старый 02.09.2018, 11:40   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от vasypu Посмотреть сообщение
почему нельзя использовать цикл do{}while(true), в данном случае?)
потому что
1) это неэффективно (практически 100% загрузка процессора)
представьте - тысячу раз в секунду нужно получить данные и проверить условие.
процессор ничем другим заниматься не будет, только этим.

2) возможно, что это и ещё и не будет работать, так, как задумано.
потому что в цикле выполняется player.Play() - если он остановит поток выполнения, то программа не будет ни на что реагировать, пока не доиграет файл,
а если (что скорее) - player.Play() запускает отдельный поток воспроизведения,
то цикл продолжится выполняться далее, опять выполнится условие (оно же за доли секунды, пока запускался mp3 файл, не изменилось) и опять запустится MP3 файл и так в цикле, пока не кончатся ресурсы компьютера.

Можно, конечно, доработать и ваш цикл (вставить туда задержки и вызов системеной функции обработки оконных сообщений, чтобы программа "не зависала"), так будет работать, но это всё не нужно - нужно делать правильно!
Как вариант - использовать системный таймер и создавать его обработчик.
Есть и другие варианты.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите понять,почему препод придирается к коду,хотя вроде как все верно,следуя условиям Delphilol Паскаль, Turbo Pascal, PascalABC.NET 8 20.02.2018 11:08
Посмотрите) Вроде правильно все но не работает. Что не так? Bane БД в Delphi 14 13.03.2014 22:14
Почему данный код закрашивает сразу 2 рядом стоящих пикселя а не один как вроде бы должно быть androk Общие вопросы C/C++ 1 10.11.2011 22:20
Как извлечь музыку из файла или может кто знает, что играет? Marsel737 Свободное общение 13 16.08.2011 20:53
Может быть так, что в мамку может попасть вирус и не загружать жесткий диск Berzhan Операционные системы общие вопросы 6 27.07.2009 21:40