Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задержки в цикле без тормозов программы, Хочу узнать как это сделать 
:(
    Опции темы
CasperSC
Дата 1.2.2010, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Есть такая проблема: У меня есть кнопка, при задержке на ней курсора мыши, она увеличивается в размерах, вроде как маленькая анимация, но из-за использования задержек System.Threading.Thread.Sleep(10) тормозит отрисовка формы "О программе", так как когда курсор покидает кнопку, она анимированно обратно уменьшается.

Код
        private void btnAboutProg_MouseHover(object sender, EventArgs e)
        {
            if (this.btnAboutProg.Width < 50)
            {
                Point P = new Point(this.chBoxReapeat.Location.X, this.chBoxReapeat.Location.Y);
                for (int i = 0; i < 6; i++)
                {
                    this.btnAboutProg.Width += 12;
                    P.X += 12;
                    this.chBoxReapeat.Location = P;
                    this.chBoxReapeat.Refresh();
                    this.btnAboutProg.Refresh();
                    System.Threading.Thread.Sleep(10);
                }
                this.btnAboutProg.Image = null;
                this.btnAboutProg.Text = "О программе";
            }
        }



и когда покидает курсор кнопку:
Код
        private void btnAboutProg_MouseLeave(object sender, EventArgs e)
        {
            if (this.btnAboutProg.Width > 50)
            {
                Point P = new Point(this.chBoxReapeat.Location.X, this.chBoxReapeat.Location.Y);
                this.btnAboutProg.Text = "";
                for (int i = 0; i < 6; i++)
                {
                    P.X -= 12;
                    this.chBoxReapeat.Location = P;
                    this.chBoxReapeat.Refresh();
                    this.btnAboutProg.Width -= 12;                  
                    System.Threading.Thread.Sleep(10);
                }
                this.btnAboutProg.Image = Properties.Resources.clock;
            }
        }



Возможно ли сделать анимацию в отдельном потоке? Есть ли способ задержки выполнения цикла без тормозов всего приложения? Выложите пожалуйста пример.
PM MAIL   Вверх
Partizan
Дата 1.2.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



CasperSC, тут, наверно, лучше таймером обойтись.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
gambit
Дата 1.2.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



А не лучше ли перейти на WPF?
PM MAIL ICQ Skype   Вверх
CasperSC
Дата 2.2.2010, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Незнаю, вообще 1 раз запустил форму WPF ничего не понял и решил оставить на попозже. На компьютере реально штук 30 книг по C#, понакачал и по WPF есть, но пока ещё не прочитал до конца просто по C# книгу, я всё таки работаю и времени в обрез. Надо будет попробовать. А WPF больше подходит для написания небольших игр, чем WinForms?

Это сообщение отредактировал(а) CasperSC - 2.2.2010, 07:53
PM MAIL   Вверх
mrbrooks
Дата 2.2.2010, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Цитата(CasperSC @  2.2.2010,  07:52 Найти цитируемый пост)
А WPF больше подходит для написания небольших игр, чем WinForms?

Для этого больше подходит XNA.
PM MAIL   Вверх
Moid
Дата 2.2.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

Репутация: нет
Всего: 3



Для данной задачи лучше писать на WPF

Конкретно для твоего случая можно попытаться уменьшить "тормоза" так:


Код

 private void btnAboutProg_MouseHover(object sender, EventArgs e)
        {
            if (this.btnAboutProg.Width < 50)
            {
                Point P = new Point(this.chBoxReapeat.Location.X, this.chBoxReapeat.Location.Y);
                for (int i = 0; i < 6; i++)
                {
                    this.btnAboutProg.Width += 12;
                    P.X += 12;
                    this.chBoxReapeat.Location = P;
                    this.chBoxReapeat.Refresh();
                    this.btnAboutProg.Refresh();
                    System.Threading.Thread.Sleep(10);

Application.DoEvents();
                }
                this.btnAboutProg.Image = null;
                this.btnAboutProg.Text = "О программе";
            }
        }



и когда покидает курсор кнопку:
        
Код

private void btnAboutProg_MouseLeave(object sender, EventArgs e)
        {
            if (this.btnAboutProg.Width > 50)
            {
                Point P = new Point(this.chBoxReapeat.Location.X, this.chBoxReapeat.Location.Y);
                this.btnAboutProg.Text = "";
                for (int i = 0; i < 6; i++)
                {
                    P.X -= 12;
                    this.chBoxReapeat.Location = P;
                    this.chBoxReapeat.Refresh();
                    this.btnAboutProg.Width -= 12;                  
                    System.Threading.Thread.Sleep(10);
Application.DoEvents();
                }
                this.btnAboutProg.Image = Properties.Resources.clock;
            }
        }



--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.