#c#
#c#
Вопрос:
Почему я не могу воспроизвести этот аудиофайл, когда время textboxordertostart.Text
в строковом формате равно системному времени? Textboxordertostart
получает время после вычитания минут из DateTimePicker
времени.
Мой код выглядит следующим образом.
SoundPlayer myplayer = new SoundPlayer();
myplayer.SoundLocation= (@"c:userswoolsvalleydocumentsvisual studio 2015ProjectsWindowsFormsApplication17WindowsFormsApplication17Alarm.wav");
if (DateTime.Now.ToString("hh:mm tt") == textBox_ordertostart.Text)
{
myplayer.Play();
}
Этот код выдает нулевое исключение
string formatString = "yyyHHmmss";
string sample = textBox_ordertostart.Text;
DateTime dt = DateTime.ParseExact(sample, formatString, null);
if (DateTime.Now == dt)
{ myplayer.Play(); }
это тоже не работает
if (DateTime.Now == DateTime.Parse(textBox_ordertostart.Text))
{ myplayer.Play(); }
Комментарии:
1. Для чего это значение
textBox_ordertostart.Text
? Вы прошли через код в отладчике, чтобы увидеть?2. Я бы установил точку останова в условной строке и вручную проверил, что
DateTime.Now.ToString("hh:mm tt")
возвращается. Вы должны иметь возможность сравнить его со значением, которое вы ввели в текстовое поле, и легко понять, почему они не совпадают.3.
textBox_ordertostart.Text
возвращает ли ваше значение, подобное этому00:00 PM
?4. Как я упоминал в своем ответе, это очень «жесткий» способ сравнения. Сначала вам нужно проанализировать содержимое текстового поля как дату и время, а затем их станет намного проще сравнивать.
5. Спасибо, ребята! В моей форме есть метка, которая принимает системное время как DateTime.Now.toString(«hh:mm tt») только для отображения системного времени. Поскольку и метка, и текстовое поле имеют строковый формат, я также сравнил их, но файл все равно не воспроизводится. Я попробую разобрать текст по дате и времени. Дайте вам знать, ребята…
Ответ №1:
То, как вы проводите сравнение, является очень «хрупким» способом сравнения, потому что оно зависит от того, вводит ли пользователь время в точном формате, в котором вы его ожидаете. Например, когда я тестировал это, я получил следующие результаты:
string datetime = DateTime.Now.ToString("hh:mm tt");
// False
Console.WriteLine(datetime == "2:06 PM");
// False
Console.WriteLine(datetime == "2:06 P.M.");
// False
Console.WriteLine(datetime == "2:06");
// False
Console.WriteLine(datetime == "02:06 P.M.");
// True
Console.WriteLine(datetime == "02:06 PM");
Если вы проанализируете его в объект DateTime, а затем выполните toString , он будет менее хрупким. Посмотрите, например, этот метод расширения:
public static bool DayMinuteEqual(this string otherDate)
{
// We have to strip out the "." character if present (e.g. 2:05 P.M.)
DateTime otherDateObj = DateTime.Parse(otherDate.Replace(".", ""));
return DateTime.Now.ToString("hh:mm tt") == otherDateObj.ToString("hh:mm tt");
}
Теперь я получаю ожидаемые результаты:
// True
Console.WriteLine("2:20 PM".DayMinuteEqual());
// True
Console.WriteLine("2:20 P.M.".DayMinuteEqual());
// False, but we'd expect it due to the omission of the "P.M."
Console.WriteLine("2:20".DayMinuteEqual());
// True
Console.WriteLine("02:20 P.M.".DayMinuteEqual());
// True
Console.WriteLine("02:20 PM".DayMinuteEqual());
Очевидно, что это гораздо меньше зависит от пользователя, вводящего дату в «идеальном» формате (но все же требует, чтобы они имели некоторое представление о правильном формате).
Ответ №2:
спасибо, ребята. Этот код работает, мне просто нужно было вызвать его в событии обновления.
private void timer1_Tick(object sender, EventArgs e)
{ label_time1.Text = DateTime.Now.ToString("hh:mm tt");
mplayer = new SoundPlayer();
mplayer.SoundLocation = (@"c:userswoolsvalleydocumentsvisual studio 2015ProjectsWindowsFormsApplication17WindowsFormsApplication17Alarm.wav");
if((DateTime.Now.ToString("HH:mm tt") == ((textBox_ordertostart.Text))))
{ mplayer.Play(); }