2012-03-06 8 views
7

tengo esta clase:Cómo iniciar rosca con la expresión lambda C#

public class Statistics 
{ 
    List<string> _lsit; 

    public List<string> ipList 
    { 
     get { return _lsit; } 
     set { _lsit = value; } 
    } 

    string _Path = @"C:\Program Files\myApp.exe"; 
    string _Path = ""; 
    ProcessStartInfo ps = null; 

    public getStatistics(string Path) 
    { 
     _Path = Path; 
     getStatistics(); 
    } 
} 

Quiero empezar la función de estadística con diferente culata en T y lo hice algo como:

Statistics stat = new Statistics (some path); 
Thread<List<string>> lList = new Thread<List<string>>(() => tsharkIps.getStatistics()); 

pero el compilador de error dice "El tipo no genérico 'System.Threading.Thread' no se puede usar con los argumentos de tipo"

No escribí toda mi clase y solo quiero saber qué hacer para iniciar el hilo

gracias

+0

I que considera que están en busca de Tarea en lugar de tema ... y allí debe usar Task.Factory para iniciar la tarea;) – Carsten

+0

Lea http://tinyurl.com/so-hints y preste más atención a su código de muestra (y a la claridad) para su próxima pregunta. –

Respuesta

31

Se necesitan dar un paso atrás para comenzar, y leer el error del compilador. Thread no es un tipo genérico. En realidad no es en todos los claro lo que estamos tratando de hacer aquí, especialmente a medida que ni siquiera han mostrado un método sin parámetros getStatistics() (que debería llamarse GetStatistics() a seguir las convenciones de nomenclatura de .NET) y el método que parametrizado getStatistics()tiene que se muestra no tiene un tipo de devolución.

partir de un hilo con una expresión lambda es la parte fácil:

Thread thread = new Thread(() => CallSomeMethodHere()); 
thread.Start(); 

No está claro cómo se traduce a su código de ejemplo sin embargo.

o utilizando el TPL en .NET 4, puede (y probablemente debe uso Task o Task<T>):

Task task = Task.Factory.StartNew(() => CallSomeMethodHere()); 

o

Task<string> task = Task.Factory.StartNew(() => CallSomeMethodReturningString()); 

Es posible que realmente desee :

Task<List<string>> statisticsTask = Task.Factory.StartNew(() => { 
    Statistics statistics = new Statistics(path); 
    return statistics.ipList(); 
}); 

Tenga en cuenta que aquí se llama al constructor dentro de la nueva tarea, lo cual es importante, ya que parece que eso probablemente esté haciendo todo el trabajo. (Eso es por lo general una mala idea para empezar, pero eso es otro tema).

usted debe buscar en .NET naming conventions en general, por cierto ...

+0

gracias intentaré esto pero no puedo usar Tarea porque estoy usando .Net 3.5, y mi método getStatistics() es solo un ejemplo – user979033