Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
1

Как избавиться от лагов в потоке с паузой?

29.01.2016, 21:38. Показов 738. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени, форум, столкнулся с вопросом, который с трудом могу описать, так что простите заранее...
(PerfClass - класс, а котором выполняется алгоритм по нахождению переменной)
Дело заключается в том, что когда я запускаю поток таким образом
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        private void BtnActive_Click(object sender, EventArgs e)
        {
            if (WorkThread.IsAlive)
            {
                WorkThread.Abort();
                BtnActive.Text = "Start";
            }
            else
            {
                BtnActive.Text = "Stop";
                WorkThread = new Thread(Work);
                WorkThread.Start();
            }
        }
        void Work()
        {
            while (PerfClass.work)
            {
                Thread.Sleep(PerfClass.timeout);
                Invoke((MethodInvoker)(() => output(PerfClass.MainEnter(), PerfClass.Statistic())));
            }
        }
то у меня нету задержки, а когда задержка идет внутри Public string work() тогда все лагает, вернее лагает поток...
Из этого, как я понял, что MainEnter() выполняется вне потока, это так?
как мне сделать внутри этой переменной задержку, как к примеру
Thread.Sleep(2000);
чтобы первоначальная форма не ожидала этой задержки(другими словами, не лагала)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2016, 21:38
Ответы с готовыми решениями:

Как увеличить приоритет устройств ввода в Windows 10? (Необходимо избавиться от лагов с мышкой и клавой)
С недавнего времени (может около месяца, не могу сказать точно), возникла проблема с приторможенным...

Необходимо избавиться от лагов с мышкой и клавой
Столкнулся с такой же проблемой. Перепробовал многое, но ничего не получилось. Нашел ваше решение,...

Как получить значение переменной созданной в потоке, в другом потоке?
Добрый день :) Возник такой вопрос "как получить значение переменной созданной в потоке, в другом...

GDI+. Почему в отдельном потоке картинки сохраняются как белые прямоугольники, а в основном потоке - всё Ок?
Всем привет, делаю функцию уменьшения картинок при помощи библиотеки GDI+, в отдельном потоке...

1
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
30.01.2016, 00:30 2
То, что вы написали, распарсить в моем мозгу не получилось, но чтобы форма не висла, Thread.Sleep(2000); должно быть в отдельном потоке, либо надо использовать await Task.Delay(время);. На счет инвоков: все, что у вас внутри Invoke,
C#
1
Invoke((MethodInvoker)(() => output(PerfClass.MainEnter(), PerfClass.Statistic())));
выполняется в главном потоке синхронно, а потому вешает форму. Не знаю, что там в тех методах, но если они длительные-не надо вызывать их внутри Invoke. И обратите внимание на разницу между Invoke и BeginInvoke-второе выполняется хоть и в главном потоке, но асинхронно.
0
30.01.2016, 00:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2016, 00:30
Помогаю со студенческими работами здесь

Как правильно составить цикл который выполняет каждую команду с разной паузой - Android
Мне нужно при нажатии кнопки, допустим button1 и button2 выполнять следующее: При нажатии на...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru