2011-12-16 2 views
0

Ce que j'essaie de faire est de lire un fichier musical pendant une durée spécifiée, puis d'arrêter la lecture. Cependant, tout le fichier de musique est en cours de lecture. Je ne peux pas utiliser la méthode 'PlaySync()' car je ne peux pas bloquer le thread.Problème de filetage lors de la lecture d'un fichier musical

+1

Est-ce que 'player' a sa propre méthode' Stop'? – sll

+0

Utilisation de l'intégré. –

+0

Peut-être que votre appel d'arrêt vient * avant * que le son ait même commencé. Contournement serait de démarrer votre minuterie au début de la lecture, pas à la demande 'play'. – jv42

Répondre

1

peut-être quelque chose comme ça

Task.Factory.StartNew(() => 
    { 
    var player = new SoundPlayer(); 
    player.SoundLocation = "myfile"; 
    player.Play(); 
    Thread.Sleep(duration) 
    player.Stop(); 
    }); 
+1

Qu'est-ce qui vous intéresse, Pourquoi downvoted? – sll

+0

Merci, cela a fonctionné! –

+0

+1 cela semble une possibilité intéressante, pourquoi le downvote? (J'ai aussi changé de place) – jv42

2

Vous n'avez pas à frayer un nouveau vous-même fil, comme la méthode SoundPlayer.Play qu'il fait lui-même.

essayer cette version:

public void Play() 
    { 
     player = new SoundPlayer(); 
     player.SoundLocation = "myfile"; 
     Timer timer = new Timer(); 
     timer.Tick += (s,e) => 
      { 
       player.Stop(); 
       timer.Stop(); 
      }; 
     timer.Interval = duration; 
     player.Play(); 
     timer.Start(); 
    }