С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 28.03.2019
Сообщений: 19
1
.NET 4.x

Анимации, создание интерфейса, создание своей кнопки

24.05.2021, 23:03. Показов 1411. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При быстром переходе от одной кнопки к другой выдает ошибку которая связана с этой частью кода:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static void AnimationInvoker()
        {
            while (IsWork)
            {
                AnimationList.RemoveAll(a => a == null || a.Status == Animation.AnimationStatus.Completed);
 
                Parallel.For(0, Count(), index =>
                  {
                      AnimationList[index].UpdateFrame();
                  });
 
                Thread.Sleep((int)Interval);
            }
        }
Ошибка следующего рода:
System.ArgumentOutOfRangeException
HResult=0x80131502
Сообщение = Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
Источник = mscorlib
Трассировка стека:
в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
в System.Collections.Generic.List`1.get_Item(Int32 index)
в Дипломный_проект.Animator.<>c.<AnimationInvoker>b__6_1(Int32 index) в C:\Users\Itan\source\repos\Дипломный проект\Дипломный проект\Control\Animator.cs:строка 48
в System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()

Код класса:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public static class Animator
    {
        public static List<Animation> AnimationList = new List<Animation>();
 
        public static int Count()
        {
            return AnimationList.Count;
        }
 
        private static Thread AnimatorThread;
 
        private static long Interval;
 
        public static bool IsWork = false;
 
        public static void Start()
        {
            IsWork = true;
            Interval = 14; // FPS ~66
 
            AnimatorThread = new Thread(AnimationInvoker)
            {
                IsBackground = true,
                Name = "UI Animation"
            };
 
            AnimatorThread.Start();
        }
 
        private static void AnimationInvoker()
        {
            while (IsWork)
            {
                AnimationList.RemoveAll(a => a == null || a.Status == Animation.AnimationStatus.Completed);
 
                Parallel.For(0, Count(), index =>
                  {
                      AnimationList[index].UpdateFrame();
                  });
 
                Thread.Sleep((int)Interval);
            }
        }
 
        public static void Request(Animation Anim, bool ReplaceIfExists = true)
        {
            Debug.WriteLine("Запуск анимации: " + Anim.ID + "| TargetValue: " + Anim.TargetValue);
            Anim.Status = Animation.AnimationStatus.Requested;
 
            Animation dupAnim = GetDuplicate(Anim);
 
            if (dupAnim != null)
            {
                if (ReplaceIfExists == true)
                {
                    dupAnim.Status = Animation.AnimationStatus.Completed;
                }
                else
                {
                    return;
                }
            }
 
            AnimationList.Add(Anim);
        }
 
        private static Animation GetDuplicate(Animation Anim)
        {
            return AnimationList.Find(a => a.ID == Anim.ID);
        }
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2021, 23:03
Ответы с готовыми решениями:

Создание своей кнопки
Здравствуйте. Изменяю класс стандартной кнопки, что бы её можно было двигать мышкой, но это то...

Создание своей кнопки в WPF
Подскажите пожалуйста. Пишу проект на C#, столкнулся с проблемой: не знаю, как и можно ли в WPF...

Создание своей кнопки.
Здравствуйте! Подскажите пожалуйста: Нужно сделать кнопку, чтобы на ней отображался свой рисунок...

Создание своей кнопки BS_OWNERDRAW
Добрый день. Нужно нарисовать свою кнопку (сделать прозрачной, без полей и прочего). Знаю, что...

2
1158 / 880 / 513
Регистрация: 09.04.2014
Сообщений: 2,086
25.05.2021, 11:38 2
Лучший ответ Сообщение было отмечено Juzzou как решение

Решение

Я так понимаю, вы для каждой кнопки имеете свой набор Animation и подменяете его в своём статическом классе Animator, что и есть причиной ошибки. Если я прав то у вас 2 выхода
1. (правильный) сделать класс Animator нестатическим и создавать для каждой кнопки свой экземпляр
2. (костыль) прерывать Parallel.For перед подменой Animation
1
0 / 0 / 0
Регистрация: 28.03.2019
Сообщений: 19
25.05.2021, 11:58  [ТС] 3
nedel, у меня в проекте более 60 кнопок, для каждой кнопки будет слишком уже, я постараюсь разобраться с этой ошибкой, но лучше будет убрать анимацию как по мне или ограничить кнопки в числе, а так спасибо за предложенные советы.
0
25.05.2021, 11:58
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2021, 11:58
Помогаю со студенческими работами здесь

Создание своей кнопки Java
Как сделать свою кнопку? Тесть в своем стиле. Пытался сделать кнопку, но она открывалась в новом...

Создание анимации для hover кнопки
Помогите создать анимацию при наведении на кнопку, искал в интернете как это сделать, понял что для...

Создание своей кнопки в MS Outlook 2016
Необходимо создать кнопку в разделе создании сообщений, при нажатии которой будет выполняться...

Создание формулы и последующее заполнение таблицы, избежание повторов информации, создание интерфейса
Не люблю просить о помощи, но, к сожалению, сроки поджимают и не позволяют подробно ознакомиться с...

Создание своей кнопки "Поделится" со счётчиком, стоит ли?
Добрый день! Кто какие решения для кнопок соц. активности использует?Поделитесь своими...

Создание анимации js
Нужно создать анимацию, есть несколько картинок. Я пытаюсь сделать это рекурсивно, но почему-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru