2012-03-26 13 views
5

estoy tratando de usar ese método de esta manera:ThreadPool.QueueUserWorkItem caso de uso

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

El problema viene porque me tira un error de compilación en la primera llamada.

CS1593 de error: Delegar System.Threading.WaitCallback' does not take 0' argumentos

Cualquier idea de cómo hacerlo sin argumentos? , alguna alternativa?

+0

ThreadPool.QueueUserWorkItem ((state) => {...); La devolución de llamada requiere un parámetro de objeto. Aunque no tienes que usarlo. –

Respuesta

12

Usted sólo puede proporcionar un parámetro para la expresión lambda, e ignorarlo:

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

O utilizar un método anónimo en su lugar:

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

Si no se preocupan por los parámetros para Anonymous métodos, no tienes que decirlos.

0

El delegado que pase necesita tomar un argumento. Si desea ignorarlo, puede simplemente reemplazar los corchetes con cualquier nombre de variable.

2

ThreadPool.QueueUserWorkItem requiere un delegado System.Threading.WaitCallback como su parámetro. Este delegado tiene un parámetro mientras que su expresión lambda tiene no. Si desea ignorar el parámetro, puede usar:

ThreadPool.QueueUserWorkItem(_ => 
{ 
    //... 
}); 
Cuestiones relacionadas