none
Dúvida Thread RRS feed

  • Pergunta

  • Boa tarde, estou realizando uma consulta de NF-e, e ao clicar em consultar, ele gera o xml, e a partir dai fica monitorando a pasta, esperando o retorno. E eu mando para o textbox para o usuário aguardar:

     txtresult.Text = "Sua solicitação foi enviada com sucesso, aguarde o retorno..";
                #region MONITORAR PASTA
                
                System.IO.FileSystemWatcher fsw = new System.IO.FileSystemWatcher("C:\\Unimake\\UniNFe\\07652413000108\\Retorno");
                fsw.IncludeSubdirectories = false;
                fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
                fsw.Filter = "*.xml";
    
                //Definimos agora os eventos a serem gerados
                fsw.Changed += new FileSystemEventHandler(fsw_Created);
                fsw.Created += new FileSystemEventHandler(fsw_Created);
                fsw.Error += new ErrorEventHandler(fsw_Error);
               
                fsw.EnableRaisingEvents = true;    

    No evento que eu verifico que é fsw_Create, tenho o seguinte código:

                        
                        if (Motivo == "Autorizado o uso da NF-e")
                        {
                            txtresult.Text = "NF-e foi autorizada com sucesso!";
                        }
                        else
                        {
                            txtresult.Text = Motivo.ToString();
    
                        }
                    

    Porém me informa esse erro:

    Erro Operação entre threads inválida: controle 'txtresult' acessado de um thread que não é aquele no qual foi criado.

    Já tentei várias formas, com Invoke, porém sempre me informa esse erro. Obrigado.

    segunda-feira, 21 de novembro de 2016 18:53

Respostas

  • Mariana, 

    Use este código para resolver seu problema:

    delegate void SetResultCallback(string text);
    
    private void SetResult(string text)
    {
      if (this.txtresult.InvokeRequired)
      { 
        SetResultCallback d = new SetResultCallback(SetResult);
        this.Invoke(d, new object[] { text });
      }
      else
      {
        this.txtresult.Text = text;
      }
    }

    E substitua seu código do fsw_create por:

     if (Motivo == "Autorizado o uso da NF-e")
                        {
                            SetResult("NF-e foi autorizada com sucesso!");
                        }
                        else
                        {
                            SetResult(Motivo.ToString());
    
                        }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Mariana C. Costa segunda-feira, 21 de novembro de 2016 19:05
    segunda-feira, 21 de novembro de 2016 18:58

Todas as Respostas

  • Mariana, 

    Use este código para resolver seu problema:

    delegate void SetResultCallback(string text);
    
    private void SetResult(string text)
    {
      if (this.txtresult.InvokeRequired)
      { 
        SetResultCallback d = new SetResultCallback(SetResult);
        this.Invoke(d, new object[] { text });
      }
      else
      {
        this.txtresult.Text = text;
      }
    }

    E substitua seu código do fsw_create por:

     if (Motivo == "Autorizado o uso da NF-e")
                        {
                            SetResult("NF-e foi autorizada com sucesso!");
                        }
                        else
                        {
                            SetResult(Motivo.ToString());
    
                        }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Mariana C. Costa segunda-feira, 21 de novembro de 2016 19:05
    segunda-feira, 21 de novembro de 2016 18:58
  • Mais uma vez Juliano, obrigado, funcionou perfeitamente, tava com dúvida pq nos outros exemplos tinha o tempo. 

    Obrigado!!!

    segunda-feira, 21 de novembro de 2016 19:05