Xamarin.android 针对xamarin android的循环中的音频文件问题

Xamarin.android 针对xamarin android的循环中的音频文件问题,xamarin.android,Xamarin.android,使用迭代循环提取数字,效果良好。 我的问题是,我想在完成这个过程时添加一个声音,每次完成这个过程时,都会有一个声音,我使用了下面的代码,但是声音有时会出现,有时不会 OnCreate _player = MediaPlayer.Create(this, Resource.Raw.beep); string[] words = str.Split("\n"); foreach (var word in words) {

使用迭代循环提取数字,效果良好。 我的问题是,我想在完成这个过程时添加一个声音,每次完成这个过程时,都会有一个声音,我使用了下面的代码,但是声音有时会出现,有时不会

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

  string[] words = str.Split("\n");
foreach (var word in words)
                    {
                     if (!word.Any(c => c < '0' || c > '9'))
                            {
                                txtView.Text = word;
                                _player.Start();
                                buttn.Visibility = ViewStates.Invisible;
                              _player.Stop();

                              }
                        }
OnCreate
_player=MediaPlayer.Create(这个,Resource.Raw.beep);
string[]words=str.Split(“\n”);
foreach(单词中的var单词)
{
如果(!word.Any(c=>c<'0'| | c>'9'))
{
Text=word;
_player.Start();
buttn.Visibility=ViewStates.Invisible;
_player.Stop();
}
}

我希望这能有所帮助

OnCreate += async (sender, e) => {

    string s = await getNumber(anyStringArg, true, ", ");

    if (s != "")
    {
        txtView.Text = s;
        buttn.Visibility = ViewStates.Invisible;

        if (_player != null) _player.reset();

        try
        {
            _player = await prepareMediaPlayer(Resource.Raw.beep);

           _player.start();
        }
        catch (Exception ex)
        {
            // your exception handler
        }
    }
}

async Task<string> getNumber(string str, bool isAll = false, string separator = "")
{
    if (str != "")
    {
        string[] words = str.Split("\n");

        // only first number match 
        if (!isAll)
        {
            int i = 0, n = words.Length();
            while (i < n && !isNumber(words[i])) i++;
            if (i < n) return words[i];
        }

        // all numbers
        else
        {
            List<string> nums = new List<string>();

            foreach (string word in words)
            {
                if (isNumber(word))
                {
                    nums.Add(word);
                }
            }

           return String.Join(separator, nums);
        }
    }

    return "";
}

bool isNumber(string str)
{
    int i = 0, n = str.Length();
    while (i < n && !(str[i] < '0' || str[i] > '9')) i++;
    return n > 0 && i == n;
}

/*  If you are not use custom Task,
     you can avoid problem on unasync Prepare()
     by invoke MediaPlayer.PrepareAsync()
     after the MediaPlayer.Create(). */

async Task<MediaPlayer> prepareMediaPlayer(url)
{
    MediaPlayer mediaPlayer;

    await Task.Run(() => {
         mediaPlayer = MediaPlayer.Create(this, url);
    });

   return mediaPlayer;
}
OnCreate+=async(发送方,e)=>{
字符串s=await getNumber(anyStringArg,true,“”);
如果(s!=“”)
{
txtView.Text=s;
buttn.Visibility=ViewStates.Invisible;
如果(_player!=null)_player.reset();
尝试
{
_player=wait preparemediplayer(Resource.Raw.beep);
_player.start();
}
捕获(例外情况除外)
{
//您的异常处理程序
}
}
}
异步任务getNumber(字符串str,bool isAll=false,字符串分隔符=)
{
如果(str!=“”)
{
string[]words=str.Split(“\n”);
//只有第一个数字匹配
如果(!isAll)
{
int i=0,n=words.Length();
而(i'9'))i++;
返回n>0&&i==n;
}
/*如果不使用自定义任务,
您可以避免unasync Prepare()上的问题
通过调用MediaPlayer.PrepareAsync()
在MediaPlayer.Create()之后*/
异步任务层(url)
{
媒体播放器;
等待任务。运行(()=>{
mediaPlayer=mediaPlayer.Create(这个url);
});
返回媒体播放器;
}

似乎有条件地错过了循环逻辑上的break子句。否则,如果在循环逻辑之后调用mediaplayer会更好。另外,当您希望获取与条件匹配的所有项目时。