grandissimo! Ho trovato il modo! Per chi avesse il mio stesso problema:

public static void Scena1()
{
ActiveFrame=1;

Thread t1=new Thread(new ThreadStart(Frame1));
t1.Start();

Thread t2 = new Thread(new ThreadStart(Frame2));
t2.Start();

Thread t3 = new Thread(new ThreadStart(Frame3));
t3.Start();

Thread t4 = new Thread(new ThreadStart(Frame4));
t4.Start();

Semaforo.Release(1);

}
public static int ActiveFrame;
public static void Frame1()
{
Inizio:
Semaforo.WaitOne();
if(ActiveFrame!=1)
{
Semaforo.Release();
goto Inizio;
}
//codice
ActiveFrame=2;
Semaforo.Release();
}
public static void Frame2()
{
Inizio:
Semaforo.WaitOne();
if(ActiveFrame!=1)
{
Semaforo.Release();
goto Inizio;
}
//codice
ActiveFrame=3;
Semaforo.Release();
}
public static void Frame3()
{
Inizio:
Semaforo.WaitOne();
if(ActiveFrame!=3)
{
Semaforo.Release();
goto Inizio;
}
//codice
ActiveFrame=4;
Semaforo.Release();
}
public static void Frame4()
{
Inizio:
Semaforo.WaitOne();
if(ActiveFrame!=4)
{
Semaforo.Release();
goto Inizio;
}
//codice
ActiveFrame=-1;
Semaforo.Release();
}