1

本当に単純な関数close();でボタンを終了しました。.

どうやってやるの?音声終了後(2~3秒)アプリを閉じます。

private void button1_Click(object sender, EventArgs e)
{
// Play sound
this.playSound();

// WAIT FOR END OF SOUND

Close();
}

private void playSound()
{
            Random random = new Random();

            // Create list of quit music
            List<System.IO.UnmanagedMemoryStream> sound = new List<System.IO.UnmanagedMemoryStream>
            {
                global::Launcher.Properties.Resources.sound_quit_1,
                global::Launcher.Properties.Resources.sound_quit_2,
                global::Launcher.Properties.Resources.sound_quit_3,
                global::Launcher.Properties.Resources.sound_quit_4,
            };

            // Random, set and play sound
            (new SoundPlayer(sound[random.Next(sound.Count)])).Play();
}
4

3 に答える 3

1
(new SoundPlayer(sound[random.Next(sound.Count)])).Play();

これにより、サウンドが非同期で再生されるため、別のスレッドで発生します。欠点は、サウンドがいつ終了するかについての情報がないことです。

代わりにできることはPlaySync、別のスレッドで手動で使用し、メインスレッドへのコールバックを設定してアプリケーションを閉じることです。

于 2012-11-11T16:15:39.333 に答える
1

同期の場合playSound()は試すことができます

private void button1_Click(object sender, EventArgs e)
{
  // Play sound
  this.playSound();
  BackgroundWorker wk = new BackGroundWorker();
  wk.RunWorkerCompleted += (s,e) => {Thread.Sleep(2000); Close(); };
  wk.RunWorkerAsync();
}

これにより、より簡単な方法を使用できるため、GUI がロックされているように見えなくなります。

private void button1_Click(object sender, EventArgs e)
{
  // Play sound
  this.playSound();
  Thread.Sleep(2000);
  Close()
}
于 2012-11-11T16:08:46.070 に答える
0

再生しているサウンドがメインのユーザーインターフェイススレッドとは異なるスレッドで再生されたため、アプリケーションは閉じます。ユーザーインターフェイス(UI)スレッドを使用してサウンドを再生する場合(new SoundPlayer(sound[random.Next(sound.Count)])).Play();は、いつでもに変更できます。(new SoundPlayer(sound[random.Next(sound.Count)])).PlaySync();アプリケーションがWaveSoundSoundPlayerファイルの再生を停止するのを待ってから、Form

private void button1_Click(object sender, EventArgs e)
{
    // Play sound
    this.playSound();

    // WAIT FOR END OF SOUND

    Close();
}
private void playSound()
{
    Random random = new Random();

    // Create list of quit music
    List<System.IO.UnmanagedMemoryStream> sound = new List<System.IO.UnmanagedMemoryStream>
    {
        global::StrongholdCrusaderLauncher.Properties.Resources.sound_quit_1,
        global::StrongholdCrusaderLauncher.Properties.Resources.sound_quit_2,
        global::StrongholdCrusaderLauncher.Properties.Resources.sound_quit_3,
        global::StrongholdCrusaderLauncher.Properties.Resources.sound_quit_4,
    };

    // Random, set and play sound
    (new SoundPlayer(sound[random.Next(sound.Count)])).PlaySync(); //We've changed Play(); to PlaySync(); so that the Wave Sound file would be played in the main user interface thread
}

ありがとう、
これがお役に立てば幸いです:)

于 2012-11-11T16:16:09.657 に答える