2012-03-26 32 views
5

Tôi đang cố gắng sử dụng phương pháp đó theo cách này:ThreadPool.QueueUserWorkItem trường hợp sử dụng

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

vấn đề này được đưa ra vì nó ném cho tôi một lỗi biên dịch trong các cuộc gọi đầu tiên.

CS1593 lỗi: Ủy System.Threading.WaitCallback' does not take 0' lập luận

Bất kỳ ý tưởng về làm thế nào để làm điều đó mà không cần lý lẽ? , thay thế nào?

+0

ThreadPool.QueueUserWorkItem ((state) => {...); Gọi lại yêu cầu tham số đối tượng. Mặc dù bạn không phải sử dụng nó. –

Trả lời

12

Bạn chỉ có thể cung cấp một tham số cho biểu thức lambda, và bỏ qua nó:

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

Hoặc sử dụng một phương pháp vô danh thay vì:

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

Nếu bạn không quan tâm đến các thông số cho vô danh phương pháp, bạn không cần phải nêu chúng.

0

Đại biểu bạn vượt qua cần thực hiện một đối số. Nếu bạn muốn bỏ qua nó, bạn chỉ có thể thay thế các dấu ngoặc với bất kỳ tên biến nào.

2

ThreadPool.QueueUserWorkItem yêu cầu tham số System.Threading.WaitCallback làm thông số của nó. Đại biểu này có một tham số trong khi biểu thức lambda của bạn không có. Nếu bạn muốn bỏ qua thông số bạn có thể sử dụng:

ThreadPool.QueueUserWorkItem(_ => 
{ 
    //... 
}); 
Các vấn đề liên quan