如何使用timer_tick定期播放声音?

问题描述

如何在计时器中播放声音?还是有其他方法可以做到这一点?我想每20分钟播放一次简短的声音。 我的代码可以正常显示计时器中的消息框,也可以使用按钮播放声音。但是不能在计时器中播放声音。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Media;

namespace Eye
{
    public partial class Form1 : Form
    {

        System.Media.soundplayer player = new System.Media.soundplayer(@"C:\Users\user\Desktop\Sounds\sound.wav");

        public int makroButon;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender,EventArgs e)
        {
            timer1.Interval = 6000;
        }
        private void radioButton1_Checked(object sender,EventArgs e)
        {
            timer1.Start();
        }

        private void timer1_Tick(object sender,EventArgs e)
        {
            player.Play();
        }
    }
}

解决方法

我手动创建了Form1_Load。因此timer1.Interval = 6000;行不起作用。大概100毫秒不足以播放声音。要创建form1_load函数,请不要手动键入它,只需在设计页面中单击double到空白处即可。并且它将被命名为“ Form1_Load_1” ,而不是“ Form1_Load”

,

所以我认为您的主要问题是单选按钮不是用于查找支票的正确控件。我使用了一个复选框,它似乎可以工作。我还用代码显式地设置了计时器,并将事件处理程序设置为tick。

    SoundPlayer player;
    private Timer timer1;

    public int makroButon;
    public Form1()
    {
        InitializeComponent();
        player = new System.Media.SoundPlayer(@"C:\path\sound.wav");
        timer1 = new Timer();
        timer1.Tick += Timer1_Tick;
    }

    private void Form1_Load(object sender,EventArgs e)
    {
        timer1.Interval = 6000;
    }

    private void Timer1_Tick(object sender,EventArgs e)
    {
        player.Play();
    }

    private void CheckBox1_CheckedChanged(object sender,EventArgs e)
    {
        if(sender is CheckBox cb)
        {
            if (cb.Checked)
            {
                timer1.Start();
            }
            else
            {
                timer1.Stop();
            }
        }
    }