Как показывать gif в WPF?

Я считаю приложение разработанным в C#, в которой, он существует, кнопка синхронизации, эта синхронизируй данные между локальным сервером и удаленным. Действие опаздывает минута в средней величине и я хотел бы показать gif с легендой "синхронизируя". Я пробовал нескольких форм, но одна даже не подала меня. Я благодарен за Вашу помощь

5
задан 24.02.2016, 20:53
3 ответа

Ты можешь помогать себя этого проекта, раньше он находился в Codeplex, но уже они мигрировали в Github WpfAnimatedGif

InstalaciГіn путь Nuget:

Install-Package WpfAnimatedGif

Использовал: Имеет значение namespace

xmlns:gif="http://wpfanimatedgif.codeplex.com"

И использует tag Image с признаком gif

<Image gif:ImageBehavior.AnimatedSource="migif.gif" />

EDIT

Основанным на твоем комментарии

Ты был бы должен использовать BackgroundWorker (или другая асинхронная форма), чтобы призывать твой процесс, так как твой экран кажется, что "замораживают" вследствие, что твой процесс выполняет в трэде вида

Пример:

    private BackgroundWorker worker;        

    private BackgroundWorker GetWorker()
    {
        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += new DoWorkEventHandler(worker_DoWork);
        worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);

        worker.RunWorkerAsync();

        return worker;
    }

    void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        //aqui acabamos
    }

    void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        //ejecuta tu proceso
    }
4
ответ дан 24.11.2019, 14:49
  • 1
    И c и # 243; mo я это использую для того, чтобы он появился пока другой процесс est и # 225; ejecut и # 225; ndose? Потому что intent и # 233; и он появляется до тех пор, пока процесс termin и # 243;. – Richard 24.02.2016, 21:01
  • 2
    Уже я издал вопрос, увидел твой комментарий в вопросе после того, как этот respeusta напечатал – jasilva 24.02.2016, 21:05
  • 3
    Он мне кажется очень хорошим ответом. Как только у него было время тестирования этого я характеризую тебя. Большое спасибо. – Richard 24.02.2016, 21:08

Очень простой, состой из 2 частей для того, чтобы gif появился в начало и не бросился, закончившись:

  1. Использует package 'WpfAnimatedGif', которого он показывает jasilva
  2. , не используй BackgroundWorker, используй вызовы async

//Синхронизирует помещение с DB

private void Sincronizar()
{
    var tsk = SincronizarAsync();
}

//MГ©todo async, чтобы синхронизировать

async Task SincronizarAsync()
{
    MostrarGifDeCarga();
    try
    {
        await Task.Run(() => MiObjeto.CargarSusDatosDesdeBD());
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error sincronizando: " + ex.ToString());
    }
    finally
    {       
        //esto lo puedes colocar después del await si no quieres usar 'finally'
        RaisePropertyChanged("MiObjeto");
        OcultarGifDeCarga(); 
    }   
}

Они mГ©todos 'MostrarGifDeCarga' и 'OcultarGifDeCarga' ты можешь размещать их в Интерфейсе, чтобы использовать их с любого вида.

И с этим оно функционирует, как ты хочешь.

1
ответ дан 24.11.2019, 14:49

Чтобы мочь показывать сообщение, когда работает процесс, ты был бы должен реализовывать того же самого используя thread или же выполнять это в отдельном процессе.

А realzias в отдельном процессе изображение заслонится.

Threads in WPF

Si ты бросаешь задание в thread ты мог бы показывать gif пока он работает.

    private void button1_Click(object sender, RoutedEventArgs e)  
    {  
        //aqui muestras el gif

        Thread thread = new Thread(Proceso);  
        thread.Start();  
    }  

    private void Proceso()  
    {  
        //aqui realizas el proceso que demora 1min  
    }   

Также ты мог бы использовать BackgroundWorker, компонент ты имеешь события по отношению к существу dodne мочь скрывать gif, когда он закончит процесс

0
ответ дан 24.11.2019, 14:49
  • 1
    Существуют формы м и # 225; s элегантные, который твой proprio Thread создавать. В конце концов, эти формы tambi и # 233; n использовать и # 225; n threads detr и # 225; s сцен, но они предотвращают тебе эту работу на таком низком уровне. Примера этого BackgroundWorker –  24.02.2016, 21:43
  • 2
    @LuiggiMendoza просвет поэтому упомянул в конце концов о BackgroundWorker, но также было бы возможно использовать Task, я поместил простой пример, чтобы снова отмечать, что нужно бросать процесс в thread для того, чтобы gif двинулся – Leandro Tuttini 24.02.2016, 22:10

Теги

Похожие вопросы