none
Atualizar imagem em WPF RRS feed

  • Pergunta

  • Bom pessoal,

    tenho uma lista em txt recupero lendo as linhas e insiro elas em uma string de Path para exibir minha imagem...sendo assim, tenho um hook que quando digito para baixo ou para cima chamo método e insiro  a imagem no componente Image, carrega normal o txt e a primeira imagem, esta sendo lido faz tudo como gostaria que fosse mas quando teclo para baixo ou cima não atualiza a imagem procurando no debug e achei um erro assim:

    "O thread de chamada não pode acessar este objeto porque ele pertence a um thread diferente." 

    este mesmo projeto implementei em windows forms e funcionou, mas as imagem quanto atualiza fica meio feia ai tentei partir para o WPF e faz uns dias e não intendi direito parece que tenho que matar esta thread para depois usar dinovo é isso?

    caso alguém tiver o caminho das pedras já agradeço este é meu código:

     public void WheelOk(string _img)
            {

                string path;

                try
                {
                    path = @"C:\MonalisaFrontEnd\Mame\Wheel\" + _img + ".png";
                }
                catch
                {
                    try
                    {
                        path = @"C:\MonalisaFrontEnd\Mame\Wheel\" + _img + ".jpg";
                    }
                    catch
                    {
                        path = @"C:\MonalisaFrontEnd\System\wheel\SemImg.png";
                    }
                }
                BitmapImage bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.UriSource = new Uri(path);
                bitmap.EndInit();
                ImgWheelOk.Source = bitmap;

    }

    no windows forms as imagens elas atualizam mas wpf não.

    domingo, 8 de julho de 2012 03:27

Todas as Respostas

  • Voce deve atribuir sua thread como sendo uma thread STA.

    Ex:

    System.Threading.Thread threadExemplo = new Thread(new ThreadStart(this.carregarForm));

    threadExemplo.SetApartmentState(ApartmentState.STA);

    threadExemplo.Start();

    Não esqueça de marcar como resposta caso resolva seu problema.

    []'s


    quarta-feira, 11 de julho de 2012 14:15
  • Você tem que chamar aparte do seu codigo que muda a imagem na thread principal, via dispatcher segue um examplo.

    imgWhellOk.Dispatcher.Invoke(
    new Action(() =>
                    {
                        imgWhellOk.Source = bitmap;
                    })
                , null)

    quarta-feira, 11 de julho de 2012 14:23
  • Você tem que chamar aparte do seu codigo que muda a imagem na thread principal, via dispatcher segue um examplo.

    imgWhellOk.Dispatcher.Invoke(
    new Action(() =>
                    {
                        imgWhellOk.Source = bitmap;
                    })
                , null)

     bom quando vi a sua resposta já tinha encontrado, e funcionou mas não como queria...

    pois tenho vários métodos iguais para atualizar várias imagens do mesmo "form"

    ele atualiza o primeiro método e parece que "trava" não atualiza o restante.

    todos os método são todos iguais.


                string path;

                try
                {
                    path = @"C:\MonalisaFrontEnd\Mame\Wheel\" + jogos[i] + ".png";
                }
                catch
                {
                    try
                    {
                        path = @"C:\MonalisaFrontEnd\Mame\Wheel\" + jogos[i] + ".jpg";
                    }
                    catch
                    {
                        path = @"C:\MonalisaFrontEnd\System\wheel\SemImg.png";
                    }
                }
                ImgWheelOk.Dispatcher.BeginInvoke((Action)(() => { ImgWheelOk.Source = new BitmapImage(new Uri(path)); }));

    obs: não sei se posso usar este mesmo tópico, pois ja resolveram a pergunta inicial.

    domingo, 15 de julho de 2012 00:34