2012-03-26 8 views
5

Próbuję użyć tej metody w ten sposób:ThreadPool.QueueUserWorkItem przypadek użycia

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

problem jest przyczyną wyrzuca mi błąd kompilacji w pierwszej rozmowy.

error CS1593: Delegat System.Threading.WaitCallback' does not take 0' argumenty

Każdy pomysł jak to zrobić bez argumentów? jakiejś alternatywy?

+0

ThreadPool.QueueUserWorkItem ((stan) => {...); Oddzwanianie wymaga parametru obiektu. Chociaż nie musisz tego używać. –

Odpowiedz

12

Wystarczy dostarczyć parametr dla wyrażenia lambda i ignorować go:

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

też użyć metody anonimowej Zamiast:

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

Jeśli nie dbają o parametrach dla anonimowych metody, nie musisz ich podawać.

0

Przekazany delegat musi wziąć jeden argument. Jeśli chcesz go zignorować, możesz po prostu zastąpić nawiasy dowolną nazwą zmiennej.

2

ThreadPool.QueueUserWorkItem wymaga delegata System.Threading.WaitCallback jako parametru. Ten delegat ma jeden parametr, podczas gdy twoje wyrażenie lambda nie ma. Jeśli chcesz zignorować parametr, możesz użyć:

ThreadPool.QueueUserWorkItem(_ => 
{ 
    //... 
}); 
Powiązane problemy