2015-03-05 5 views
-8
private void button3_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog ofd = new OpenFileDialog(); 
     ofd.Filter = "Music|*.mp3"; 
     if(ofd.ShowDialog()==DialogResult.OK) 
     { 
      SoundPlayer sp = new SoundPlayer(ofd.FileName); 
      sp.Play(); 
     } 
    } 

Я пробовал данный код, но его не показывал. Вместо этой программы зависает. И с курса уже есть [STATHREAD] в основном методе. Пожалуйста, помогите!Откройте диалоговое окно «Файл», не работающий в C#!

+8

PLeaser использует отладчик, устанавливает контрольные точки. Где именно _freezes_ ваша программа? Каковы значения переменных (ожидаемые или фактические)? Что пошло не так? – DrKoch

ответ

0

Я предполагаю, что метод воспроизведения SoundPlayer() является блокирующим вызовом, и, поскольку вы используете это в своем потоке пользовательского интерфейса, это препятствует работе пользовательского интерфейса, пока он не закончит игру.

Попробуйте запустить плеер как отдельный поток и посмотреть, не заставляет ли программа зависнуть.

+0

Я предполагаю, что вы неправильно пометили тему, и это не значит, что Open File Dialog не работает (я предполагаю, что это отображается, и давайте выберем файл), но это «замораживание», как только вы нажмете «ОК», внутри. – Ceisc

+1

'SoundPlayer.Play()' - это асинхронный вызов. Класс имеет метод «PlaySync()», который является синхронным. Поэтому ваша теория неверна. Реальная проблема здесь в том, что ОП не потрудился предоставить полезный вопрос, на который можно было бы ответить. Лучше не пытаться ответить на такие вопросы. –

+0

@PeterDuniho Ты совершенно прав. Я должен был проверить, как работает SoundPlayer.Play(). Я также не должен был пытаться ответить на неполный вопрос. К счастью, я думаю, что я узнал больше о том, как использовать stackoverflow в течение двух лет с тех пор, как я попытался ответить здесь. – Ceisc

Смежные вопросы