Pregunta

Soy un poco nuevo ThreadPool en .NET. Me preguntaba, si yo puedo enviar un objeto a mi método de devolución de llamada, ¿cómo he podido acceder a la variable miembro de clase para llamar a sus métodos? (Ver CustomClass en CallBack ())

Y cómo iba a cargar los datos de CustomClass? Cómo puedo pasar el CustomClass a un método de respuesta diferente? está bien este enfoque?

Como se puede ver que es un poco de falta de experiencia, por lo que cualquier consejos en el camino realmente sería apreciada.

Gracias, Kave

class Program
           {
                static void Main(string[] args)
                {
                    CustomClass customClass = new CustomClass();

                ThreadPool.QueueUserWorkItem(CallBack, "Hello"); 


                Console.Read();
            }

            private static void CallBack(object state)
            {
                customClass.SaveData(state.ToString());
            }
        }
¿Fue útil?

Solución

class Program
{
  static void Main(string[] args)
  {
    CustomClass customClass = new CustomClass();
    ThreadPool.QueueUserWorkItem(x => CallBack(customClass, "Hello")); 
    Console.Read();
  }

  private static void CallBack(CustomClass custom, string text)
  {
    customClass.SaveData(text);
  }
}

Otros consejos

La forma más sencilla de hacerlo es utilizar un cierre para capturar toda la variables que desee (es decir, utilizan un método anónimo o una expresión lambda). Usted necesita tener cuidado sobre exactamente lo que está capturado si estás usando un bucle, pero es más práctico que pasa a través de un objeto y tener que echarlo de nuevo al tipo correcto, etc.

Además de lo que se ha dicho: Si CustomClass está bajo su control y de forma asíncrona invocando SaveData es un caso de uso común, se podría pensar en proporcionar un método SaveDataAsync:

class CustomClass {

    public void SaveDataAsync(string path) {
        ThreadPool.QueueUserWorkItem(state => this.SaveData(path));
    }

    public void SaveData(string path) {
        ...
    }
}

la basada en eventos asíncronos Patrón .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top