2012-03-26 9 views
5

sto cercando di utilizzare tale metodo in questo modo:ThreadPool.QueueUserWorkItem dei casi d'uso

public void Method() 
{ 
     ThreadPool.QueueUserWorkItem(() => 
     { 
      while(!paused) 
      { 
       ThreadPool.QueueUserWorkItem(() => {...); 
      } 
     }); 
    } 
} 

Il problema nasce perche 'mi butta un errore di compilazione nella prima chiamata.

errore CS1593: Delegare System.Threading.WaitCallback' does not take 0' argomenti

Qualsiasi idea di come farlo senza argomenti? , qualche alternativa?

+0

ThreadPool.QueueUserWorkItem ((stato) => {...); La richiamata richiede un parametro oggetto. Anche se non devi usarlo. –

risposta

12

Si può solo fornire un parametro per l'espressione lambda, e ignorarlo:

ThreadPool.QueueUserWorkItem(ignored => 
{ 
    while(!paused) 
    { 
     ThreadPool.QueueUserWorkItem(alsoIgnored => {...}); 
    } 
}); 

Oppure utilizzare un metodo anonimo invece:

ThreadPool.QueueUserWorkItem(delegate 
{ 
    while(!paused) 
    { 
     ThreadPool.QueueUserWorkItem(delegate {...}); 
    } 
}); 

Se non si cura di parametri per anonima metodi, non è necessario specificarli.

0

Il delegato che si passa deve prendere un argomento. Se vuoi ignorarlo, puoi semplicemente sostituire le parentesi con qualsiasi nome di variabile.

2

ThreadPool.QueueUserWorkItem richiede un delegato System.Threading.WaitCallback come parametro. Questo delegato ha un parametro mentre l'espressione lambda non ha. Se si desidera ignorare il parametro è possibile utilizzare:

ThreadPool.QueueUserWorkItem(_ => 
{ 
    //... 
}); 
Problemi correlati