Pergunta

Eu sou um pouco novo para ThreadPool no .NET. Eu estava pensando, se eu só pode enviar um objeto para o meu método de retorno de chamada, como eu sou capaz de acessar a variável de membro de classe para chamar seus métodos? (Veja CustomClass em CallBack ())

E como eu carregar os dados de CustomClass? Faço para passar o CustomClass a um método de retorno diferente? É esta abordagem bem?

Como você pode ver, é um pouco de falta de experiência, de forma alguma dica ao longo do caminho seria muito apreciada.

Obrigado, 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());
            }
        }
Foi útil?

Solução

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);
  }
}

Outras dicas

A maneira mais fácil de fazer isso é usar um fechamento para capturar toda a variáveis ??que você quer (ou seja, usar um método anônimo ou uma expressão lambda). Você precisa ser cuidadoso sobre o que exatamente é capturado se você estiver usando um loop, mas é mais acessível do que passando por um objeto e ter de lançá-lo de volta para o tipo certo etc.

Além do que foi dito: Se CustomClass está sob seu controle e de forma assíncrona invocando SaveData é um caso de uso comum, você poderia pensar sobre o fornecimento de um método SaveDataAsync:

class CustomClass {

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

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

o evento-based Asynchronous Pattern .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top