Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Странные ошибки в компонентах (https://forum.antichat.xyz/showthread.php?t=91181)

slesh 10.11.2008 13:55

Странные ошибки в компонентах
 
Довольно странные и специфически ошибка связанные с работой в потоке.


1) Webbrowser и потоки.
Если запустить поток в котором компоненту Webbrowser задастся переход на адрес.
пример
Код:

procedure Go(param:pointer);stdcall;
begin
 form1.WebBrowser1.Navigate('http://ya.ru');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 thId:dword;
begin
 thId:=CreateThread(nil,0,@go,nil,0,thId);
end;

выдает ошибку. Даже прога бывает падает. Причем проявилось тока на Win XP SP2 и SP3. НА Win 2003 - работает нормально.

2) аналогично предудущему через раз отображается inputbox вызываемый в потоке. Причем появляется сообщение типа, канвас не может быть отрисован.
Если через except обработать исключение и заного попробовать повторить операцию то получается. При этом такой глюк независимо от винды

Algol 10.11.2008 15:15

WebBrowser это ActiveX компонент, и следовательно работает очень специфично в потоках. Лучше всего его запускать только в главном потоке. А еще лучше - вообще не использовать.

Dian 11.11.2008 04:03

VCL это однопоточная библиотека.
Физически, её, конечно, можно дергать из других потоков, но результат будет обескураживающий.
Обращайся из главного потока, например, через Synchronize()

slesh 11.11.2008 10:09

Вообще WB я юзал для того чтобы нормально отображать картинки независимо от формата их. bmp,jpg,gif,png Да и облегчает загрузку с удаленных серверов в плане если используется ssl
Но тутже проблема не только с WB но еще и с inputbox который основан тоже на vcl
Хотя на win2003 всё пашет. Так что дело не в многопоточности.
Проблема решена по простому - через посылку форме собственных сообщений и в обработчике стоят все действия.

vid 21.11.2008 19:55

кури посты про синхронизацию - так как ты делаешь - делать низзя ;)


Время: 09:40