2012-03-26 15 views
5

Ich versuche, das Verfahren auf diese Weise zu verwenden:ThreadPool.QueueUserWorkItem Use Case

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

Das Problem kommt, weil es mir einen Übersetzungsfehler in dem ersten Aufruf wirft.

Fehler CS1593: Delegieren System.Threading.WaitCallback' does not take 0' Argumente

Jede Vorstellung davon, wie es ohne Argumente zu tun? , irgendeine Alternative?

+0

ThreadPool.QueueUserWorkItem ((state) => {...); Rückruf erfordert Objektparameter. Obwohl Sie es nicht benutzen müssen. –

Antwort

12

Sie können nur einen Parameter für den Lambda-Ausdruck zur Verfügung stellen, und ignorieren:

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

Oder eine anonyme Methode verwenden statt:

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

Wenn Sie nicht anonym über Parameter egal Methoden müssen Sie sie nicht angeben.

0

Der Delegat, den Sie übergeben, muss ein Argument verwenden. Wenn Sie es ignorieren möchten, können Sie die Klammern einfach durch einen beliebigen Variablennamen ersetzen.

2

ThreadPool.QueueUserWorkItem erfordert einen Delegaten System.Threading.WaitCallback als seinen Parameter. Dieser Delegat hat einen Parameter, während Ihr Lambda-Ausdruck keine hat. Wenn Sie den Parameter ignorieren möchten, den Sie verwenden können:

ThreadPool.QueueUserWorkItem(_ => 
{ 
    //... 
}); 
Verwandte Themen