сделал бегущюю строку,взял Panel ну и на нее кидаю label,которые потом двигаю label.Left,двигаю циклически, тоесть когда какой-то label ушел из поля видимости помещая его за тем, за которым он шел,проблема в том, что если добавляю более 20 таких label,строка начинает потреблять 100% CPU, так вот не могу понять из-за чего такое может быть ?!( подскажитеЮ если кто знает, наверняка же кто нибудь писал бегущюю строку !
Здравствуйте, <Аноним>, Вы писали:
А>сделал бегущюю строку,взял Panel ну и на нее кидаю label,которые потом двигаю label.Left,двигаю циклически, тоесть когда какой-то label ушел из поля видимости помещая его за тем, за которым он шел,проблема в том, что если добавляю более 20 таких label,строка начинает потреблять 100% CPU, так вот не могу понять из-за чего такое может быть ?!( подскажитеЮ если кто знает, наверняка же кто нибудь писал бегущюю строку !
Проблемв в том что ты изменяешь свойство, а свойство — это вызов метода, который делает много работы.
Я бы вообще отказался от Label, и просто рисовал бы на контроле.
Что тебе мешает создать свой контрол, примерно вот так. Это вариант будет просто летать.
public class Foo : System.Windows.Forms.Control
{
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.DrawString("foo", ..., x, y);
base.OnPaint(e);
}
}
не забудь добавить перерисовку по таймеру (ивалидэйт), чтобы двигались твои бегущие строки.
Используй таймер из винформс.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: бегущяя строка потребляет 100% CPU!!!(
От:
Аноним
Дата:
19.12.07 16:26
Оценка:
Здравствуйте, Hike, Вы писали:
H>Здравствуйте, <Аноним>, Вы писали:
А>>сделал бегущюю строку,взял Panel ну и на нее кидаю label,которые потом двигаю label.Left,двигаю циклически, тоесть когда какой-то label ушел из поля видимости помещая его за тем, за которым он шел,проблема в том, что если добавляю более 20 таких label,строка начинает потреблять 100% CPU, так вот не могу понять из-за чего такое может быть ?!( подскажитеЮ если кто знает, наверняка же кто нибудь писал бегущюю строку !
H>Проблемв в том что ты изменяешь свойство, а свойство — это вызов метода, который делает много работы. H>Я бы вообще отказался от Label, и просто рисовал бы на контроле.
H>Что тебе мешает создать свой контрол, примерно вот так. Это вариант будет просто летать.
H>
Здравствуйте, Vovstehn, Вы писали: A>> skipped
Хотя нет, не туда посмотрел, там все правильно.
Дело скорее всего тут: e.Graphics.DrawString(this.Text, Font, new SolidBrush(ForeColor), this.Location.X, this.Location.Y);
Ты меняешь позицию самого контрола, и графиксом рисуешь с отступлением, вот он у тебя и вылазит за пределы видимости.
У тебя сам метод OnPaint не вызывается? или просто не видны результаты?
Re[5]: бегущяя строка потребляет 100% CPU!!!(
От:
Аноним
Дата:
20.12.07 13:57
Оценка:
Здравствуйте, Vovstehn, Вы писали:
V>Здравствуйте, Vovstehn, Вы писали: A>>> skipped V>Хотя нет, не туда посмотрел, там все правильно. V>Дело скорее всего тут: V>e.Graphics.DrawString(this.Text, Font, new SolidBrush(ForeColor), this.Location.X, this.Location.Y); V>Ты меняешь позицию самого контрола, и графиксом рисуешь с отступлением, вот он у тебя и вылазит за пределы видимости. V>У тебя сам метод OnPaint не вызывается? или просто не видны результаты?
именно OnPaint не вызывается, не понимаю в чем дело, ведь должен же (((!!
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Vovstehn, Вы писали:
V>>Здравствуйте, Vovstehn, Вы писали: A>>>> skipped V>>Хотя нет, не туда посмотрел, там все правильно. V>>Дело скорее всего тут: V>>e.Graphics.DrawString(this.Text, Font, new SolidBrush(ForeColor), this.Location.X, this.Location.Y); V>>Ты меняешь позицию самого контрола, и графиксом рисуешь с отступлением, вот он у тебя и вылазит за пределы видимости. V>>У тебя сам метод OnPaint не вызывается? или просто не видны результаты? А>именно OnPaint не вызывается, не понимаю в чем дело, ведь должен же (((!!
Если контрол невидим (скрыт другим или уполз куда) — OnPaint вызываться не будет — зачем, если его не видно?
С уважением, Анатолий Попов.
ICQ: 995-908
Re: бегущяя строка потребляет 100% CPU!!!(
От:
Аноним
Дата:
20.12.07 22:25
Оценка:
Здравствуйте, Аноним, Вы писали:
А>сделал бегущюю строку,взял Panel ну и на нее кидаю label,которые потом двигаю label.Left,двигаю циклически, тоесть когда какой-то label ушел из поля видимости помещая его за тем, за которым он шел,проблема в том, что если добавляю более 20 таких label,строка начинает потреблять 100% CPU, так вот не могу понять из-за чего такое может быть ?!( подскажитеЮ если кто знает, наверняка же кто нибудь писал бегущюю строку !
во первых — каждый новый объект на форме это относительно крупный кусок памяти и цпу,
во вторых — при передвижении вызывается метод перерисовки, в твоем случае скорее всего для всех 20 лабел
проще создать просто один лабел и какую-нибудь строку буфер, а потом удалять одну букву в начале и прибавлять в конце
будет лучше, если сделать это в отдельном потоке и установкой времени спячки потока можно будет регулировать скорость строки
но это тоже не лучший вариант. зато простой.