【问题标题】:Play sound till dialogbox.dialogresult == dialogresult.OK播放声音直到 dialogbox.dialogresult == dialogresult.OK
【发布时间】:2011-04-15 07:26:36
【问题描述】:

我正在开发一个 winform 应用程序。 我想播放一个声音文件,直到对话框结果对一个消息框来说是 OK 的。我怎样才能做到这一点。

例如

 /*Till*/ (MessageBox.Show("Alarm") == DialogResult.OK)

 //Play a sound file

我尝试了 while 和 do while 但没有成功。我需要使用后台工作者还是在单独的线程中运行代码??

【问题讨论】:

  • do while怎么没成功?发生了什么?
  • @Code Gray:是的,但它的客户要求。他想强迫自己在对话框出现时立即关闭它。所以他想要一个持续的警报.. !!我知道这真的很烦人:)
  • 我想弹出很多消息框
  • @Niraj:是的,在我阅读了您的整个问题并意识到您正在创建警报后,我删除了该评论。闹铃是可以的。 ;-)
  • 那是因为 Message box show 命令是同步的。该过程一直等到完成,即您单击“确定”。

标签: c# winforms dialog messagebox


【解决方案1】:

您不需要滚动自己的线程。 .NET 类库已经为您做到了。你可以这样做:

        SoundPlayer p = new SoundPlayer(@"C:\Windows\Media\chimes.wav");
        p.PlayLooping();
        MessageBox.Show("Alarm");
        p.Stop();

【讨论】:

    【解决方案2】:

    是的,在弹出消息框时启动的单独线程中运行声音文件。一旦 MessageBox 返回 OK,您就可以调用该线程来告诉音乐停止,或者您可以终止该线程。

    编辑

    另一种方法是编写您自己的继承自 MessageBox 的 AlarmMessageBox。唯一的区别是,在创建时它会开始播放该声音,而在单击“确定”时它会停止。这可以只在一个线程中工作。

    【讨论】:

    • @Chirstian:创建一个 AlarmMessageBox 是个好主意。现在就试试。 !
    • MessageBox 没有可以访问的构造函数,出于所有意图和目的,它充当静态类,所以这不是一个选项。
    • 如果您可以在创建时开始播放声音并在单击确定时停止播放,那么您不需要单独的类。这就像 sound.start();MessageBox.Show("Alarm");sound.stop()。子类有什么好处?
    • @Lasse V. Karlsen - 这是一个很好的观点。无需从 MessageBox 继承即可创建自定义 MessageBox。但这将是一些工作。所以我建议只使用两个线程。
    • @Lasse:是的,alarmMessageBox 不起作用。但是线程是一个不错的选择。谢谢大家:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多