IEnumerator solution!

Hi, folks! First I need to say that i've tried many ways to get this works, but i have problem with access modifiers...

Simplifying, this is the code:

C#
using UnityEngine;
using System.Collections;
using System.IO;

public class Joemerson : MonoBehaviour
{
   public static void Falar (int Nmero)
   {
      StartCoroutine(Ler(Nmero));
   }

   IEnumarator Ler(int N)
   {
      ...
      print("Testing");          // Midia_Legenda is another public class
      while(Midia_Legenda.Atendimento != Ficha)          // Both of this variables are uint
      {
         yield return new WaitForEndOfFrame();
      }
      ...          // Do some other stuff
   }
}

Please, anyone can explain, what I have to do to this works?

After you posted your question over and over again here's a solution for your problem that should work. Coroutines needs a MonoBehaviour script instance to run on. StartCoroutine is a member function of MonoBehaviour so it can't be called from a static function without a script instance. If you want to start one via a static method you need some kind of a singleton.

//C#

using UnityEngine;
using System.Collections;
using System.IO;

public class Joemerson : MonoBehaviour
{
    private static Joemerson m_Instance = null;
    public static Joemerson Instance
    {
        get 
        {
            if (m_Instance == null)
            {
                // Find a singleton instance
                m_Instance = (Joemerson)FindObjectOfType(typeof(Joemerson)); 
                // If there is no GameObject with this script, create one
                if (m_Instance == null)
                    m_Instance = (new GameObject("Joemerson Singleton")).AddComponent<Joemerson>();
            }
            return m_Instance;
        }
    }

   public static void Falar (int Nmero)
   {
      Instance.StartCoroutine(Instance.Ler(Nmero));
   }

   private IEnumerator Ler(int N)
   {
      print("Testing");
      while(Midia_Legenda.Atendimento != Ficha)
      {
         yield return new WaitForEndOfFrame();
      }
   }
}