在停止SoundPlayer'Alarm' program.

已加入
2021年1月31日
留言内容
7
编程经验
Beginner
嗨,UAll,

使用CSharp和逐步学习的新功能-也遵循YouTube的一些创新。
因此,我在这里向大家提出我的问题。

首先,这是我的程序-Clock Alarm:
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Media;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Forms;

namespace ClockAlarm
{
    public partial class Form1 : Form
    {
        System.Timers.Timer timer;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer = new System.Timers.Timer();
            timer.Interval = 1000;
            timer.Elapsed += Timer_Elapsed;

        }

        delegate void UpdateLabel(Label lbl, string value);
        void UpdateDataLabel(Label lbl, string value)
        {
            lbl.Text = value;
        }

        private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            DateTime currentTime = DateTime.Now;
            DateTime userTime = dateTimePicker.Value;
            if (currentTime.Hour == userTime.Hour && currentTime.Minute == userTime.Minute && currentTime.Second == userTime.Second)
            {
                timer.Stop();
                try
                {
                    UpdateLabel upd = UpdateDataLabel;
                    if (lblStatus.InvokeRequired)
                        Invoke(upd, lblStatus, "STOP");
                    SoundPlayer player = new SoundPlayer();
                    player.SoundLocation = @"C:\Programmeren in C Sharp\Projecten\ClockAlarm\电动六-危险!高电压";
                    player.PlayLooping();
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void bttnStart_Click(object sender, EventArgs e)
        {
            timer.Start();
            lblStatus.Text = "Programma is lopende ...";
        }

        private void bttnStop_Click(object sender, EventArgs e)
        {
            timer.Stop();
            lblStatus.Text = "Programma gestopt door de gebruiker.";
        }
    }
}
当我启动程序时,没问题。
警报响起时,我单击“停止”,但音乐仍在播放。
我可以输入来自bttnStop_Click的最后几行:
player.Stop();
但是,当我尝试使用该程序时,程序会自动尝试将SoundPlayer插入播放器。
我的问题,
当我单击“停止”时,如何停止音乐播放。

亲切的问候,直到下一次。

让代码!

Wim。
 
由主持人最后编辑:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
我们的OP有时间学习诸如范围之类的C#基础知识,因为它们显然跳过了它,直接进入WinForms编程。
 
已加入
2021年1月31日
留言内容
7
编程经验
Beginner
你好呀,
我已经对此进行了调整,并且可以正常工作。
谢谢。

现在另一个问题。
我想在我的孩子的计算机上设置这个小程序。因此,在调试文件中,我可以找到executabe文件。如果我将此文件复制到他们的计算机上,则可以正常工作,但是我也复制/粘贴到他们的wright映射中的WAV文件会出现问题。程序中用于加载wav文件的链接位于同一文件夹中。

我可以得到一些提示吗

谢谢!
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
向我们显示您的更新代码。我问的原因是因为在OP的第50行中,您对WAV文件的路径进行了硬编码。如果您的孩子计算机上不存在该确切路径,或者您的孩子没有该路径的权限,则无法加载WAV文件。

通常,应将诸如图像和音乐之类的资源作为资源嵌入程序集中,而不是作为松散文件。这样,您便知道在部署应用程序时,它是完全自给自足的。此外,它为任何想要用其他文件替换您的资源文件的人提高了标准。想象一下,您的孩子用Rick Astley's替换重命名wave文件"绝不会放弃你" to "电动六-危险!高电压".
 
已加入
2021年1月31日
留言内容
7
编程经验
Beginner
ClockAlarm:
namespace ClockAlarm
{
    public partial class Form1 : Form
    {
        System.Timers.Timer timer;
        SoundPlayer player = new SoundPlayer();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer = new System.Timers.Timer
            {
                Interval = 1000
            };
            timer.Elapsed += Timer_Elapsed;
            player.SoundLocation = @"C:\ ClockAlarmFile \ Alarm.wav";
            player.Load();

        }


        delegate void UpdateLabel(Label lbl, string value);
        void UpdateDataLabel(Label lbl, string value)
        {
            
            lbl.Text = value;
        }

        private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //"Current time" is niet "de tijd nu"?!
            DateTime currentTime = DateTime.Now;
            DateTime userTime = dateTimePicker.Value;
            if (currentTime.Hour == userTime.Hour && currentTime.Minute == userTime.Minute && currentTime.Second == userTime.Second)
            {
                timer.Stop();
                try
                {
                    UpdateLabel upd = UpdateDataLabel;
                    if (lblStatus.InvokeRequired)
                        Invoke(upd, lblStatus, "Timer is gestopt.");
                    player.Play();
                    player.PlayLooping();

                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void bttnStart_Click(object sender, EventArgs e)
        {
            timer.Start();
            lblStatus.Text = "Timer Started.";
        }

        private void bttnStop_Click(object sender, EventArgs e)
        {
            timer.Stop();
            lblStatus.Text = "Timer Stoped.";
            player.Stop();
        }
    }
}
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
文件也一样"C:\ ClockAlarmFile \ Alarm.wav"是否存在于您孩子的机器上?他们的帐户是否有权读取文件?
 
最佳 底部