只能使用断点Xamarin Studio
本文关键字:Xamarin Studio 断点 | 更新日期: 2023-09-27 18:22:02
此代码:
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; } };
在Xamarin.iOS中,MediaPlayer
是一个命名空间,而不是类型。因此,目前尚不清楚使用哪种类型创建:
_player = MediaPlayer.Create(this, Resource.Raw.dark);
现在有几种与媒体相关的类型是异步的,即当您调用Stop
时,它会要求播放器停止,然后立即返回。IOW您将在实际停止操作完成之前重新获得控制权。这可能解释了为什么放置断点会使代码工作(它引入了延迟,使其看起来像是同步工作)。
_player.Release();
永远不要手动调用Release
(这一行应该有编译器警告)。在进行手动内存管理(例如调用Retain
)的非常特殊的情况下,这是必需的。这是非常低的级别(XI内部需要它),并且用户代码中很少需要非常。
_player.Dispose();
这也不是调用Dispose
的合适位置,因为Stop
可能还没有完成它的工作(处理实例可能会产生问题,因为它仍在使用、停止、本机运行)。有些类型提供的事件会告诉你事情(如停止)何时真正发生。即便如此,您也可能只想让GC完成它的工作。