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

Вниз

AV при Synchronize в модальной форме.   Найти похожие ветки 

 
tytus   (2008-06-09 17:25) [0]

Доброго дня всем.
Показываю одальную форму:

MForm:=TMForm.Create(Application);
try
 MForm.ShowModal;
finally
 FreeAndNil(MForm);
end;


В этой форме создаю поток.
Из потока вызываю Synchronize(UpdateRE);

procedure TMyThread.UpdateRE;
begin
 with MForm.RE1 do
 begin
   Lines.Add("какой-то текст");
   PostMessage(Handle, WM_VSCROLL, SB_BOTTOM, 0);
 end;
end;

Ругается на строке with MForm.RE1 do.
В чем тут дело? Ведь в случае сглавной формой никаких проблем нет.


 
Поросенок Винни-Пух ©   (2008-06-09 17:27) [1]

в переменной MForm мусор


 
tytus   (2008-06-09 17:31) [2]

>Поросенок Винни-Пух ©   (09.06.08 17:27) [1]
вы имеете ввиду что переменная MForm ниначто не ссылается?
Но в юните потока стоит uses MForm;


 
Поросенок Винни-Пух ©   (2008-06-09 17:35) [3]

И чего?


 
Поросенок Винни-Пух ©   (2008-06-09 17:37) [4]

Кроме того, вот этого делать нельзя

procedure TMyThread.UpdateRE;
begin
with MForm.RE1 do
begin
  Lines.Add("какой-то текст");


 
tytus   (2008-06-09 17:38) [5]

>Поросенок Винни-Пух ©   (09.06.08 17:35) [3]
а то, что с Главной формой приложения метод потока Synchronize работает нормально, а с модальной - нет!
Поясните, что значит в переменной MForm мусор


 
tytus   (2008-06-09 17:39) [6]

>Поросенок Винни-Пух ©   (09.06.08 17:37) [4]
тысчю раз делал - работает атлична.


 
Поросенок Винни-Пух ©   (2008-06-09 17:39) [7]

это значит в ней нет валидной ссылки на экземпляр класса формы


 
Поросенок Винни-Пух ©   (2008-06-09 17:40) [8]

тысчю раз делал - работает атлична.

Я просто не обратил внимание что там вызов идет через syncronize

остается версия с мусором.


 
Loginov Dmitry ©   (2008-06-09 17:46) [9]

> В этой форме создаю поток.
> Из потока вызываю Synchronize(UpdateRE);


В какой момент создается поток? Если по OnCreate модальной формы, то в этом момент MForm не определено (особенно высока вероятность AV, если после создания треда происходит длительная задержка). Еще - откуда вызывается Synchronize(UpdateRE)?


 
tytus   (2008-06-09 17:46) [10]

>Поросенок Винни-Пух ©   (09.06.08 17:39) [7]
дак мне что - передавать ссылку в поток?

{TMyThread}
private
 FForm:TObject;
public
 constructor Create(AForm: TObject);
...
constructor TMyThread.Create(AForm: TObject);
begin
 FForm:=AForm;
end;

procedure TMyThread.UpdateRE;
begin
with TMForm(FForm).RE1 do
begin
  Lines.Add("какой-то текст");
  PostMessage(Handle, WM_VSCROLL, SB_BOTTOM, 0);
end;
end;

счаз так попробую... а как по-другому?


 
tytus   (2008-06-09 17:50) [11]

>Loginov Dmitry ©   (09.06.08 17:46) [9]
поток создается в модальной форме при клике на кнопке.
откуда вызывается Synchronize(UpdateRE)? - я думаю большой разницы в этом нет. Что из метода Execute потока, что из какой-нибудь другой процедуры потока - все равно работает. Делал много раз, но только с главной фомой.


 
Поросенок Винни-Пух ©   (2008-06-09 17:52) [12]

чудес-то не бывает.
главная или заглавная форма, ав он и в африке ав.


 
tytus   (2008-06-09 17:57) [13]

>Поросенок Винни-Пух ©   (09.06.08 17:52) [12]
однако чудеса случаются.
Делал я сей поток с главной формой (для тестирования). Все работает отлично.
Перенес код потока в другое приложение, с модальной формой (думал - какая разница где поток вызывать?) - и вот вам - AV!


 
Поросенок Винни-Пух ©   (2008-06-09 17:59) [14]

чудес не бывает.


 
tytus   (2008-06-09 18:01) [15]

>tytus   (09.06.08 17:46) [10]
заработало!
Всем спасибо!


 
Тын-Дын ©   (2008-06-09 20:21) [16]

Ссылку на форму-то зачем передавать?
Разве не достаточно ссылки на Re1?


 
Loginov Dmitry ©   (2008-06-09 20:33) [17]

> однако чудеса случаются.


случаются. Раз в 100 лет.
Но уж точно не в этом случае ))


 
Anatoly Podgoretsky ©   (2008-06-09 21:09) [18]

> Loginov Dmitry  (09.06.2008 20:33:17)  [17]

Но в этом случае чудо сработало.



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

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

Наверх




Память: 0.5 MB
Время: 0.017 c
3-1201386021
leonidus
2008-01-27 01:20
2008.07.06
Размещение изображения в таблице Access


2-1212514901
tango
2008-06-03 21:41
2008.07.06
объясните пожалуйста, что значит каждая из процедур?


2-1212838230
redlord
2008-06-07 15:30
2008.07.06
почему на двух компах Tbitbtn и tbutton отображаются по разному


15-1211457004
Дмитрий С
2008-05-22 15:50
2008.07.06
На каком это языке?


11-1184554609
ЛАМА_0
2007-07-16 06:56
2008.07.06
Баг?.