Avatar billede kroning Nybegynder
01. september 2008 - 09:55 Der er 5 kommentarer og
1 løsning

Indy TIdTCPServer og OnExecute

Jeg benytter TIdTCPServer 10 og har lidt problemer med at finde ud af hvordan man opdatere noget på sin form i OnExecute.
Jeg kan uden problemer opdatere Labels og andet på min Main form inde fra OnExecute men jeg har en ide om at det ikke er tilladt da den jo kører inde fra en anden tråd, men jeg kan ikke finde noget info om det?
Avatar billede tolderlund Nybegynder
01. september 2008 - 13:24 #1
Du har helt ret i at man ikke må opdatere sin form direkte fra en anden tråd, fordi VCL ikke er thread-safe.
Du skal bruge Synchronize proceduren for at gøre det. Læs hjælpen.
Der er selvfølgelig også andre måder, du f.eks. kan poste en message fra den sekundære tråd til hovedtråden.
Avatar billede kroning Nybegynder
01. september 2008 - 13:31 #2
Synchronize findes ikke længere i Indy 10, men har fundet svaret i en NG, det er TIdSync der skal benyttes nu.
Avatar billede kroning Nybegynder
01. september 2008 - 13:33 #3
Således:

  type
        TEditSync = class(TIdSync)
        protected
            procedure DoSynchronize; override;
        public
            Edit: TEdit;
            Msg: String;
            class procedure SetText(AEdit: TEdit; const AMsg: String);
        end;

    class procedure TEditSync.SetText(AEdit: TEdit; const AMsg: String);
    begin
        with Create do
        try
            Edit := AEdit;
            Msg := AMsg;
            Synchronize;
        finally
            Free;
        end;
    end;

    procedure TEditSync.DoSynchronize;
    begin
        Edit.Text := Msg;
    end;

    procedure TForm1.TCPServer1OnExecute(AContext:TIDContext);
    begin
        .....
        TEditSync.SetText(Form1.Edit1, 'Demo');
        ...
    end;
Avatar billede tolderlund Nybegynder
01. september 2008 - 16:11 #4
Jeg tænkte på Synchronize som er en del af TThread.
Det må vel være den som din class procedure TEditSync.SetText bruger?
Avatar billede kroning Nybegynder
01. september 2008 - 19:15 #5
Smider du et svar.
Avatar billede tolderlund Nybegynder
02. september 2008 - 09:02 #6
Jeg samler ikke specielt på point, men skidt da...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester