none
[C#/WPF] Background Worker está travando RRS feed

  • Pergunta

  • E aí galera, beleza? Estou tentando utilizar o Background Worker e minha aplicação continua travando... Como resolver isso? Uso ele numa classe, olhem:

    Classe Esperar:

    class _Esperar
        {
            public static void Funcao(string textoAparecer, string textoCompletar, Action acaoDoWork, Action acaoCompleted)
            {
                foreach (Window window in Application.Current.Windows)
                {
                    if (window.GetType() == typeof(JanelaPrograma))
                    {
                    
                BackgroundWorker bwFuncao = new BackgroundWorker();
                        bwFuncao.WorkerReportsProgress = true;
                bwFuncao.DoWork += delegate(object sender, DoWorkEventArgs e)
                {
                    (window as JanelaPrograma).Dispatcher.Invoke((Action)(() =>
                    {
                        (window as JanelaPrograma).controleInformacao.tbInformacao.Text = textoAparecer;
                    }));
    
                    acaoDoWork();
                };
                bwFuncao.RunWorkerCompleted += delegate (object sender, RunWorkerCompletedEventArgs e)
                {
                    (window as JanelaPrograma).Dispatcher.Invoke((Action)(() =>
                    {
                        (window as JanelaPrograma).controleInformacao.tbInformacao.Text = textoCompletar;
                    }));
    
                    acaoCompleted();
                };
                bwFuncao.RunWorkerAsync();
    
                    }
                }
            }
        }

    E como faço para chama-la:

    _Esperar.Funcao("Carregando imagem de capa...", "Imagem de capa atualizada com sucesso!",
                    delegate
                    {
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                ofdCapa.ShowDialog();
                                ImageBrush ib = new ImageBrush(_Utilidades.ConverterBitmapParaImageSource(_Utilidades.ImagemPretoBranco(new Bitmap(ofdCapa.FileName))));
                        ib.Stretch = Stretch.UniformToFill;
                        ib.TileMode = TileMode.None;
                        gridBackground.Background = ib;
                            }));
                        },
                    delegate
                    {
    
                    });

    Ele funciona, só que na hora da execução do método ele trava. O que fazer?

    quarta-feira, 2 de novembro de 2016 22:36

Respostas

Todas as Respostas

  • Olá Gerlanio Torres,

    Dá uma olhada no post do Macoratti e ver se lhe ajuda a resolver o seu problema.

    http://www.macoratti.net/13/07/c_backg1.htm

    Não consegui entender o que você está querendo fazer,  se o post não lhe ajudar informa o que você está querendo fazer com o código acima que tento lhe ajudar.

    Abraço


    Klayton Gomes (Software Architecture) MCP/MCTS/MCAD/MCPD/MCSD Solution Developer

    quinta-feira, 3 de novembro de 2016 11:44
  • Olá Klayton Gomes, eu olhei o artigo do Marcoratti mas já tinha visto. Eu sei como usar o Background Worker, só que el não está funcionando. A classe que estou querendo usar, é para evitar a criação de vários Background Worker's, daí se eu usasse apenas a classe, evitaria tanto a criação de vários. O método da classe recebe um nome de função, a resposta de ação, a ação do DoWork e a ação do RunWorkerCompleted, que executaria a função que recebe quando for chamado o método. Você tem Skype ou alguma rede social para mantermos contato? Posso dar mais detalhes. Obrigado pela ajuda. Abraços!
    quinta-feira, 3 de novembro de 2016 15:03
  • Bom dia Gerlanio Torres,

    Conseguiu a solução?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 8 de novembro de 2016 11:36
    Moderador
  • Boa tarde,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 10 de novembro de 2016 15:26
    Moderador