работает только с точкой останова - Xamarin Studio

1

этот код:

  try{
            _player.Stop();
            _player.Release();
            _player.Dispose();
                _player = null;
            }
            catch( Exception)
            {
            }
        }

работает только если я поставил точку останова на _Player.Stop(). Зачем? Я использую Xamarin Studio, я не использую точку останова, в которой говорится: "jobject" не должен быть IntPtr.Zero. Имя параметра: jobject

что это значит? и почему это работает, только если у меня есть точка останова?

также ему это не нравится

if (_Play.Isplaying)//он всегда дает мне эту ошибку: IntPtr.Zero. Имя параметра: jobject

        button.Click += delegate {
            if( flag == 1)
            {
                return;
            }
            ThreadPool.QueueUserWorkItem(o=> Stopped());
            int temp = Convert.ToInt16(test1.Text) ;
            temp = temp * 44100 *60 *2;
            if( tone1 ==0)
            {
                trackW = new whitenoise(temp);
                trackW.Frequency = Num; //Convert.ToDouble(Beattext.Text);
                ThreadPool.QueueUserWorkItem(o=> trackW.play());
                flag = 1;
            }else if (tone1 ==1)
            {
                trackP = new PinkNoise(temp);
                trackP.Frequency = Num;//Convert.ToDouble(Beattext.Text);
                ThreadPool.QueueUserWorkItem(o=> trackP.play());
                flag = 1;
            }
            else if (tone1 ==2 )
            {
            trackB = new BrownNoise(temp);
                trackB.Frequency =Num;// Convert.ToDouble(Beattext.Text);
            ThreadPool.QueueUserWorkItem(o=> trackB.play());
            flag = 1;
            }
            else if (tone1 ==3 )
            {
                _player = MediaPlayer.Create(this, Resource.Raw.dark);
                _player.Start();
                //flag = 1;
            }
            else if (tone1 ==4 )
            {
                _player2 = MediaPlayer.Create(this, Resource.Raw.thunder);
                _player2.Start();
                //flag = 1;
            }
        };
  • 0
    Плеер не запускается сразу? Может быть, вы пытаетесь остановить это, прежде чем это началось. Где вы создаете плеер и как его запустить?
  • 0
    это начинается сразу, но не останавливается .. иногда это останавливается
Показать ещё 7 комментариев
Теги:
xamarin
xamarin.ios

1 ответ

0

В Xamarin.iOS MediaPlayer - это пространство имен, а не тип. Поэтому неясно, какой тип создается с помощью:

_player = MediaPlayer.Create(this, Resource.Raw.dark);

Теперь несколько типов, связанных с носителями, являются асинхронными, то есть когда вы вызываете Stop он попросит игрока остановиться, а затем немедленно вернуться. IOW вы получите контроль до того, как будет завершено фактическое действие остановки. Вероятно, это объясняет, почему создание точки останова делает ваш код работоспособным (это приводит к задержкам, которые делают его похожим на то, что он работает синхронно).

_player.Release();

Никогда не вызывайте Release вручную (для этой строки должно быть предупреждение компилятора). Это необходимо в особых случаях, когда вы выполняете ручное управление памятью (например, вызываете " Retain). Этот очень низкий уровень (внутренним элементам XI это требуется) и очень редко требуется в коде пользователя.

_player.Dispose();

Это также неправильное место для вызова Dispose поскольку Stop может не выполнить эту работу (и удаление экземпляра может создать проблему, поскольку она все еще используется, останавливается, изначально). Некоторые типы предоставляют события, которые расскажут вам, когда на самом деле происходят вещи (например, остановка). Даже тогда вы можете просто позволить GC выполнить эту работу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню