Usuário com melhor resposta
[C#/WPF] Background Worker está travando

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?
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
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 4 de novembro de 2016 14:57
- Marcado como Resposta Robson William SilvaModerator quinta-feira, 10 de novembro de 2016 15:26
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
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 4 de novembro de 2016 14:57
- Marcado como Resposta Robson William SilvaModerator quinta-feira, 10 de novembro de 2016 15:26
-
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!
-
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.
-
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.