仅适用于断点 - Xamarin Studio

时间:2014-09-16 00:01:54

标签: c# xamarin.ios xamarin

此代码:

  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;
            }
        };

1 个答案:

答案 0 :(得分:0)

在Xamarin.iOS MediaPlayer中是名称空间,而不是类型。所以不清楚创建的是哪种类型:

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

现在有几种与媒体相关的类型是异步的,即当您拨打Stop时,要求播放器停止然后立即返回。在实际停止操作完成之前,您将恢复控制权。这可能解释了为什么设置一个断点使你的代码工作(它引入的延迟使它看起来像是同步工作)。

_player.Release();

不要手动调用Release(该行应该有编译器警告)。在非常特殊的情况下,您需要进行手动内存管理(例如,调用Retain)。用户代码中很少需要非常低级别(XI内部需要它)和非常

_player.Dispose();

由于Dispose可能没有完成它的工作,因此也不是致电Stop的正确位置(处置该实例可能会产生问题,因为它仍在使用,停止,本地)。某些类型提供的事件会告诉您实际发生的事情(如停止)。即便如此,你可能只想让GC做它的工作。