Einzelnen Beitrag anzeigen

Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Thread in Anwendung verursacht EAVoilation

  Alt 13. Nov 2006, 09:25
Bisher ist es so...

Ich habe die AOChat Komponente auf meiner Form. Im Create der Form wird die Konfiguration geladen und auch gleich das AOChat.Connect ausgefüht. Danach das AOChat.Login...

Wie man ja aus dem namen erkennen kann, ist es eine Chat Komponente. Da das Chatsystem von AO nicht das dollste ist, reagiere ich mit Threads auf die Ereignisse der Komponente.

Delphi-Quellcode:
{ ---------------------------------------------------------------------------- }
{ -   Thread zum registrieren der Memberstatus starten  (Online / Offline)   - }
{ ---------------------------------------------------------------------------- }
procedure TCore_Form.AOChatFriendStatusChange(Sender: TObject;
  Friend: TFriendInfo);
Var
  ChangeMemberstatus : TChangeMemberstatus;
begin
ChangeMemberstatus := TChangeMemberstatus.Create(True);
ChangeMemberstatus.FreeOnTerminate := True;
ChangeMemberstatus.Orgname := Organisation;
ChangeMemberstatus.AOChat := AOChat;
ChangeMemberstatus.Online := Friend.Online;
ChangeMemberstatus.Charname := Friend.Name;
ChangeMemberstatus.Resume;
end;
Bisher damit es lauffähig ist, habe ich die AOChat praktisch mit übergeben. Im Thread kann ich dann auf diese Zugreifen. Ich hätte halt gerne diese Komponente aus den Threads raus.
Also dachte ich mir in meiner Hauptform erstelle ich die schon angesprochene Function die dann die Daten direkt ausgibt. So das ich im Thread selber wirklich nur das wichtigste erledige.


Delphi-Quellcode:
  AOChat.SendGroup(Orgname, OutputStr);
  //Core_Form.HandleThreadMessages(True, Outputstr);
Sobald ich aber die Daten an meine Core_Form übergebe kommt die Zugriffsverletzung.
Wenn ich dagegen im Thread die Komponente mit übergebe klappt es.

Delphi-Quellcode:
Function TCore_Form.HandleThreadMessages(IsCommand: Boolean; Msg: String): Boolean;
Begin
Msg := FormatOutgoing(Msg);
AOChat.SendGroup('Point of no Return', 'Test');
End;
Ich berücksichtige hier nichtmal Variablen. Es wird einfach nur was Statisch ausgegeben aber das klappt einfach nicht. Geht das aus den Threads heraus nicht?
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat