0

C#は非常に新しく、奇妙なコードの問題があることに気づきました。ExpressバージョンのC#2010を使用しています。例として、午前10時、午前1130時、午後2時などの特定の時間に再生するWAVファイルが必要です。ボタンを使用してWAVを再生することはできますが、ボタンをクリックしないといつでも再生できません。何かアイデアや提案はありますか?タイマーイベントを使おうとしていますが、それを使うとボタンすら機能しません。

4

2 に答える 2

1

タイマーを使用する必要があります。タイマーの間隔を 1 秒に設定します。次に、タイマーティックイベントで現在のシステム時刻を確認します。特定の時間 (午前 11 時 / 午前 11 時 30 分 / 午後 2 時) に一致する場合は、タイマーを停止してサウンドを再生します。サウンドの再生が終了したら、タイマーを再度開始します。

private void MyTimer_Tick(object sender, EventArgs e)
{
        DateTime todayNow = DateTime.Now;

        // For 11 AM
        if (todayNow.Equals(new DateTime(todayNow.Year, todayNow.Month, todayNow.Day, 11, 00, 0)))
        {
            MyTimer.Stop(); // Stop the timer before you play the wav file
            PlaySound();
        }
        // For 11 30 AM
        else if (todayNow.Equals(new DateTime(todayNow.Year, todayNow.Month, todayNow.Day, 11, 30, 0)))
        {
            MyTimer.Stop(); // Stop the timer before you play the wav file
            PlaySound();
        }
        // For 2 PM
        else if (todayNow.Equals(new DateTime(todayNow.Year, todayNow.Month, todayNow.Day, 14, 00, 0)))
        {
            MyTimer.Stop(); // Stop the timer before you play the wav file
            PlaySound();
        }
}


// Once the Sound playing is over you can start the timer immediately
void OnSoundPlayOver
{
   MyTimer.Start(); 
}
于 2012-08-16T14:29:24.123 に答える
0

これは、あなたが求めているものに似た、私が作成したコードです。その中で、ユーザーはカウントダウンする秒数 (ティック) を設定し、カウントが終了すると、「YellowSubmarine」が再生されます。したがって、これは時間ベースではありませんが、うまくいけば、正しい軌道に乗ることができます。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;

namespace TickCounter_MGilliland
{
    public partial class Form1 : Form
    {

        int NumberOfTicks;
        SoundPlayer Song = new SoundPlayer("YellowSubCut.wav");
        bool AlarmGo = false;


        public Form1()
        {
            InitializeComponent();

            NumberOfTicks = 1;

            SecondTimer.Interval = 1000;
            SecondTimer.Enabled = true;

            Progress.Maximum = 100;
            Progress.Value = 0;
        }

        private void StartButton_Click(object sender, EventArgs e)
        {
            if (InputTicks.Text != string.Empty)
            {
                try
                {
                    // Get the number of ticks that the user wants and set the input to ""
                    NumberOfTicks = Int16.Parse(InputTicks.Text);
                    InputTicks.Text = string.Empty;
                }
                catch (Exception s)
                {
                    MessageBox.Show("Exception: "+ s.ToString());
                    InputTicks.Text += " <-FixMe";
                }

                if (NumberOfTicks > 0)
                {
                    // Set ShowTicks' text to the number of ticks and show it
                    ShowTicks.Text = NumberOfTicks.ToString();
                    ShowTicks.Show();

                    InputTicks.ReadOnly = true;

                    AlarmGo = true;
                    Progress.Value = Progress.Maximum = NumberOfTicks;

                    // Start the timer
                    SecondTimer.Start();
                }
                else
                    MessageBox.Show("Input Must be an unsigned number greater than 0!");

            }
            else
                MessageBox.Show("I can't count ticks you haven't given, Sherlock!");
        }

        private void StopButton_Click(object sender, EventArgs e)
        {
            InputTicks.ReadOnly = false;
            SecondTimer.Stop();
            ShowTicks.Text = string.Empty;
            ShowTicks.Hide();
            Progress.Value = 0;
            Song.Stop();
            MessageBox.Show("Phew... I'm glad you stopped that...\nIt was really starting to tick me off.");
        }

        private void SecondTimer_Tick(object sender, EventArgs e)
        {
            if (NumberOfTicks > 0)
            {
                // Decrease the number of ticks and change the value in ShowTicks
                ShowTicks.Text = (--NumberOfTicks).ToString();
                Progress.Value = NumberOfTicks;
            }
            else
            {
                NumberOfTicks = 0;
                SecondTimer.Stop();
                if (AlarmGo)
                    Song.PlayLooping();
                AlarmGo = false;
            }
        }
    }
}
于 2012-08-16T14:04:30.570 に答える