Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.02.12;
Скачать: CL | DM;

Вниз

Когда завершается отрисовка Image?   Найти похожие ветки 

 
i2e   (2011-10-27 12:26) [0]

Выполняется
ImageTx.Picture.Bitmap := mBmp[3];  ImageTx.Invalidate;

С большой вероятностью, попытка начать новую отрисовку изображения приводит к AccessVialation (AV).
Программа работает час-полтора, показывая на "мигающем" индикаторе процесс обмена данными, потом делает AV.
Можно как-то узнавать, что идёт отрисовка, чтобы не начинать новую?


 
Омлет ©   (2011-10-27 12:34) [1]

> С большой вероятностью, попытка начать новую отрисовку изображения приводит к AccessVialation (AV).

С большой вероятностью у тебя ошибка в программе.


 
И. Павел ©   (2011-10-27 20:22) [2]

В справке ясно написано, что ничего страшного при множественном вызове invalidate нет. Контрол перерисуется тогда, когда сможет, а не на каждый invalidate.

"Invalidate informs a control that its entire surface needs to be repainted. Calling Invalidate can prevent flicker caused by a series of partial repaints. There is no performance penalty for calling Invalidate multiple times before the control is actually repainted."


 
Rouse_ ©   (2011-10-27 20:52) [3]

ImageTx.Picture.Bitmap.Assign(mBmp[3])


 
i2e   (2011-10-28 06:39) [4]

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

Попробую еще так:
ImageRx.Picture.Assign(nil);
ImageRx.Picture.Assign(mBmp[3]);

Буду искать. Непременно доложу, что нарыл.


 
И. Павел ©   (2011-10-28 08:24) [5]

> когда просто отключен, программа не виснет

Когда отключен Invalidate или и "Bitmap:=" и "Invalidate"?


 
han_malign   (2011-10-28 09:36) [6]

SetLampState(aLampState)
  InterlockedExchange(FLampState, aLampState);
  PaintBox.Invalidate;

OnPaint
  PaintBox.Canvas.Draw(X, Y, mBmp[FLampState]);


- причем даже - более-менее(Invalidate завязан на родительский список контролов - если он статичен - то абсолютно -)- потокобезопасно...


 
han_malign   (2011-10-28 09:43) [7]

З.Ы. Но правильнее - использовать ImageList - потому что там есть много вкусного...
  ilLamp.DrawOverlay(PainBox.Canvas, X, Y, FLampState, FLampSubState);


 
i2e   (2011-10-28 10:38) [8]

к [5]:
>> когда просто отключен, программа не виснет
>Когда отключен Invalidate или и "Bitmap:=" и "Invalidate"?

когда отключен индикатор (т.е. и Bitmap, и Invalidate).

к [7]:
ImageList и использовал.
было так:
IndicImageList.GetBitmap(LampState, ImageTx.Picture.Bitmap);  ImageTx.Repaint;, где LampState присваивалось 0..5, в зависимости от нужной картинки.
(ранее были сделаны программы, в которых это трудится без нареканий)

"Трясу" дальше...


 
han_malign   (2011-10-28 12:25) [9]


> "Трясу" дальше...

- вариант - OnChange{Invalidate}/OnPaint{<мгновенный штамп или блокировка FIFO>} (я это называю - "ленивый кадр") - помимо отсутствия постоянного создания/разрушения GDI-ресурса  и лишнего копирования растра(ImageList ==> Bitmap ==> Image) - гарантирует отзывчивость интерфейса при дребезге состояний(пропуск кадра)...


 
БезымянныйСтудент   (2011-11-02 11:32) [10]

А зачем вообще Invalidate? Делайте просто Repaint...
Да и думаю врядли из-за этого может быть AV, даже если там несколько потоков... Поищите в другом месте программы...)

> Программа работает час-полтора, ... , потом делает AV.

Ну так мож у вас там утечка памяти где или типа того?



Страницы: 1 вся ветка

Текущий архив: 2012.02.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1319421182
Nic
2011-10-24 05:53
2012.02.12
Автоматическая сортировка DBGridEh


15-1319718265
И. Павел
2011-10-27 16:24
2012.02.12
Можно ли назначить триггер на чужую БД?


2-1320340245
vsafary
2011-11-03 20:10
2012.02.12
Память и динамические массивы


15-1319683450
brother
2011-10-27 06:44
2012.02.12
что означает %5 в поле POST запроса?


6-1250528504
sniknik
2009-08-17 21:01
2012.02.12
Генерация файлов для получения сертификата (SSL)