• Как мгновенно завершить Task?

    @NikolayKhablenko Автор вопроса
    Алексей Березников, Спасибо за наглядный пример. Но не хотелось бы использовать два компонента, да еще и стороннюю библиотеку. Но за пример, спасибо, буду использовать его , если не смогу найти решение... Просто и это все рботает на ура, просто иногда, при смене картинок, task не завершается, в методе устанавливается картинка .png, а потом с этого же таска выерается кадр и перезаписывается. мне всего то нужно убить таск, до установки source=*.png
    Написано
  • Как мгновенно завершить Task?

    @NikolayKhablenko Автор вопроса
    Петр, То есть, мне достаточно, убрать все Thread.Sleep() и заменить их ManualResetEvent(n милисекунд) и моя проблема должна решиться?
    Написано
  • Как мгновенно завершить Task?

    @NikolayKhablenko Автор вопроса
    Петр, Проанализировав Выше мой код, и учитывая вопрос, который был задан, есть вариант, как мне помочь в решении проблемы?
    Написано
  • Как мгновенно завершить Task?

    @NikolayKhablenko Автор вопроса
    Алексей Березников, Вот полный пример метода. Может так будет понятнее... как решить задачу. Изначально, я нашел решения на Thread но потом узнал, что из нельзя сразу остановить, типа когда хотят тогда и освобождают ресурсы... Поэтому перешел на Task стало лучше, но все равно лагает.

    private void FillImages_byTAB2(int _TabpageSelected)
    {
    if (StructureGroupQues.Count < 1)
    {
    return;
    }
    if (StructureGroupQues[_TabpageSelected].QuestionDetail.Count < 1)
    {
    return;
    }
    cancelTokenSource1.Cancel();

    volatileComplette1 = true;



    cancelTokenSource1 = new CancellationTokenSource();
    CancellationToken token1 = cancelTokenSource1.Token;


    token1.Register(() => {
    volatileComplette1 = true;
    Thread.Sleep(1);
    Image_Left.Source = null;
    return;
    });

    Image_Left.Visibility = Visibility.Visible;
    Image_Left.Source = null;

    string[] PathDir_Image;
    string[] PathDir_Animation;
    string sql_command1 = string.Empty;
    sql_command1 = "SELECT PathDir FROM Spravochnik_Image where ((ID_Question_Detail=" + StructureGroupQues[_TabpageSelected].QuestionDetail[0].QDet_ID + ") AND (ISAnimation=0))";
    int row_count_Pathdir = 0;
    req.con.Open();
    SQLiteCommand exeSql1 = new SQLiteCommand(sql_command1, req.con);
    SQLiteDataReader dr1 = exeSql1.ExecuteReader();
    while (dr1.Read())
    {
    row_count_Pathdir++;
    }
    PathDir_Image = new string[row_count_Pathdir];
    dr1.Close();
    int i = 0;
    if (row_count_Pathdir > 0)
    {
    dr1 = exeSql1.ExecuteReader(CommandBehavior.CloseConnection);
    while (dr1.Read())
    {
    PathDir_Image[i] = dr1[0].ToString();
    i++;
    }
    dr1.Close();
    req.con.Close();
    }

    dr1.Close();
    req.con.Close();

    Image_Left.Visibility = Visibility.Visible;
    Image_Center.Visibility = Visibility.Visible;
    Image_Right.Visibility = Visibility.Visible;
    Image_Left.Source = null;
    Image_Center.Source = null;
    Image_Right.Source = null;
    switch (PathDir_Image.Length)
    {
    case 0:

    break;
    case 1:
    Image_Center.Visibility = Visibility.Collapsed;
    Image_Right.Visibility = Visibility.Collapsed;

    Image_Left.Source = new BitmapImage(new Uri(PathDir_Image[0], UriKind.RelativeOrAbsolute));
    break;
    }

    if (GLOBAL_Check_Animation7_3 == true)
    {
    string sql_command_Anim = "SELECT PathDir FROM Spravochnik_Image where ((ID_Question_Detail=" + StructureGroupQues[_TabpageSelected].QuestionDetail[0].QDet_ID + ") AND (ISAnimation=1))";
    int row_count_Pathdir_Anim = 0;
    req.con.Open();
    SQLiteCommand exeSqlAnim = new SQLiteCommand(sql_command_Anim, req.con);
    SQLiteDataReader dr_Anim = exeSqlAnim.ExecuteReader();
    while (dr_Anim.Read())
    {
    row_count_Pathdir_Anim++;
    }
    PathDir_Animation = new string[row_count_Pathdir_Anim];
    dr_Anim.Close();
    int ii = 0;
    if (row_count_Pathdir_Anim > 0)
    {

    dr_Anim = exeSqlAnim.ExecuteReader(CommandBehavior.CloseConnection);
    while (dr_Anim.Read())
    {
    PathDir_Animation[ii] = dr_Anim[0].ToString();
    ii++;
    }
    dr_Anim.Close();
    req.con.Close();
    }

    dr_Anim.Close();
    req.con.Close();



    GifBitmapDecoder decoder1;
    BitmapSource bitmapSource1;
    int frameCount1;

    GifBitmapDecoder decoder2;
    BitmapSource bitmapSource2;
    int frameCount2;

    GifBitmapDecoder decoder3;
    BitmapSource bitmapSource3;
    int frameCount3;
    switch (PathDir_Animation.Length)
    {
    case 0:

    break;
    case 1:
    if (!(String.IsNullOrEmpty(PathDir_Animation[0])))
    {

    volatileComplette1 = false;

    decoder1 = new GifBitmapDecoder((new Uri(PathDir_Animation[0], UriKind.RelativeOrAbsolute)), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    frameCount1 = decoder1.Frames.Count;



    th_Image1 = new Task(() =>
    {
    Thread.Sleep(1);
    if (token1.IsCancellationRequested)
    {
    return;
    }
    while (!volatileComplette1)
    {
    Thread.Sleep(1);
    if (token1.IsCancellationRequested)
    {
    return;
    }

    for (int b = 0; ((b < frameCount1) && (!volatileComplette1)); b++)
    {


    this.Dispatcher.Invoke(new Action(delegate ()
    {
    bitmapSource1 = decoder1.Frames[b];
    Image_Left.Source = bitmapSource1;
    Thread.Sleep(1);
    if (token1.IsCancellationRequested)
    {
    return;
    }
    }));
    Thread.Sleep(1);
    if (token1.IsCancellationRequested)
    {
    return;
    }
    System.Threading.Thread.Sleep(30);
    if (token1.IsCancellationRequested)
    {
    return;
    }
    }

    System.Threading.Thread.Sleep(5000);
    if (token1.IsCancellationRequested)
    {
    return;
    }
    }

    }, token1);
    th_Image1.Start();
    }
    break;
    }
    Написано
  • Как мгновенно завершить Task?

    @NikolayKhablenko Автор вопроса
    Алексей Березников, Кроме https://github.com/XamlAnimatedGif/XamlAnimatedGif..., есть еще варианты, как пихать в один компонент Image как .png так и gif?
    Написано
  • Как мгновенно завершить Task?

    @NikolayKhablenko Автор вопроса
    Петр, Sleep(30) фреймы в анимации выводяться каждый кадр с задержкой в 30 мс, если убрать задержку, они тупо пролистаются и вместо визуального отображения анимации - получиться быстрый перебор кадров и все, а не анимация...
    Написано
  • Как мгновенно завершить Task?

    @NikolayKhablenko Автор вопроса
    Добрый день. Спасибо за ответ. Мне наоборот, не нужно дожидаться завершение TASK. У меня, по кнопке, берется другая информация, и другие файлы Png, GIF, и иногда просто остается кадр прошлой анимации. Мне не нужно дожидаться завершения.
    По поводу https://github.com/XamlAnimatedGif/XamlAnimatedGif - а в него можно пихать, так как я пихаю в image и картинки и анимации?
    Написано