Quote Originariamente inviata da oregon Visualizza il messaggio
Ci fai vedere una tua prova ?
Ciao, sono riuscito a farlo ma è un po' "zozza" come cosa, in particolare visto che dovrò richiamare questa funzione molte volte! Mi serve la massima efficienza possibile e penso che ci sia un largo margine di miglioramento!

Nel mio caso reale non devo generare numeri casuali ma andare a leggere una lista di file dal drive e sputare fuori il path ogni volta che me ne serve uno! Attualmente per "tirare fuori" il singolo path dal thread lo faccio scrivere su una variabile statica pubblica e lo leggo da fuori il thread, ma non mi piace molto come soluzione! Ne esistono di più efficienti?

Ecco il codice che ho usato, basta richiamare prima threadStart() e poi getNext() ogni volta che serve un nuovo valore:

codice:
private static ManualResetEvent ThreadEvent = new ManualResetEvent(false);
private Thread SampleThread = null;
private static Boolean terminateThread = false;
public static string singleFile = "";


public void ReadFile()
{
    //normalmente uso la @ prima del path, ho cambiato in C:\\ visto che piace di più al parser del forum
    foreach (string FilePath in Directory.GetFiles("C:\\", "*.txt", SearchOption.AllDirectories))
    {
        singleFile = FilePath;


        ThreadEvent.Reset();
        ThreadEvent.WaitOne();


        if (terminateThread) break;
    }


    //Lettura del thread terminata


}


private void startThread()
{
    SampleThread = new Thread(new ThreadStart(ReadFile));
    Thread InstanceCaller = new Thread(new ThreadStart(ReadFile));
    InstanceCaller.Start();
}


public string getNext()
{
    ThreadEvent.Set();
    return singleFile;
}