![]() |
Thread Zugriffsverletzung
Diese Klasse
Delphi-Quellcode:
benutzt einen TThread (TThumbnailThread) wie man sieht. Ich verstehe nicht, warum ich im Konstruktor von TMyListView auf sämtliche Methoden des Threades zugreifen kann und in TreeUpdate eine Zugriffsverletzung bekomme. :wall:
TMyListView = class(TCustomListView)
private FThumbnailThread: TThumbnailThread; protected public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure TreeUpdate(NewRoot: PItemIDList);
Delphi-Quellcode:
Hier noch die Thread-Klasse (Standard):
procedure TMyListView.TreeUpdate(NewRoot: PItemIDList);
begin if (NewRoot <> nil) then begin FThumbnailThread.Suspend; //HIER ZUGRIFFSVERLETZUNG!!! end; end;
Delphi-Quellcode:
Der Thread läuft übrigens. (Endlos Schleife mit Sleep(1000)) Nur diese blöde Zugriffsverletzung, die ich ziemlich unlogisch finde..
TThumbnailThread = class(TThread)
private FListView: TMyListView; protected procedure Execute; override; public constructor Create(const ListView: TMyListView); destructor Destroy; override; end; DANKE! |
Re: Thread Zugriffsverletzung
Hi,
um auf Daten der VCL Form zuzugreifen (aus einem Thread aus), solltest du ![]() mfG mirage228 |
Re: Thread Zugriffsverletzung
wo und wie erzeugtst du FThumbnailThread (bzw. wo wirds zugewiesen ?)
|
Re: Thread Zugriffsverletzung
Zitat:
Delphi-Quellcode:
constructor TMyListView.Create(AOwner: TComponent);
begin inherited; FThumbnailThread := TThumbnailThread.Create(Self); FThumbnailThread.Resume; //Funktioniert end;
Delphi-Quellcode:
constructor TThumbnailThread.Create(const ListView: TMyListView);
begin inherited Create(True); Priority := tpLowest; FreeOnTerminate := True; Self.FListView := ListView; end; |
Re: Thread Zugriffsverletzung
Zitat:
|
Re: Thread Zugriffsverletzung
und wie / wo wird TreeUpdate aufgerufen ?
und ist TMyListView und TWOCListView das selbe ? |
Re: Thread Zugriffsverletzung
Zitat:
Zitat:
|
Re: Thread Zugriffsverletzung
Kannst denn Code der TreeUpdate aufruft posten ?
Ist die Variabel der Klasse wo du TreeUpdate aufrufst richtig initialisiert ? |
Re: Thread Zugriffsverletzung
Delphi-Quellcode:
TMyShellTreeView = class(TShellTreeView)
private FMyListView: TMyListView; protected function CanChange(Node: TTreeNode): Boolean; override; published property WMyListView: TMyListView read FMyListView write FMyListView; end;
Delphi-Quellcode:
**** Habe mal den Parameter überall entfernt, um den Fehler in der PIDL auszuschließen.
function TMyShellTreeView.CanChange(Node: TTreeNode): Boolean;
var Fldr: TShellFolder; begin Result := inherited CanChange(Node); if Result and Assigned(Node) then begin if Assigned(FMyListView) then Fldr := TShellFolder(Node.Data); FMyListView.TreeUpdate;//(Fldr.AbsoluteID); // **** end; end; -> Immer noch ein Zugriffsfehler.. |
Re: Thread Zugriffsverletzung
setz mal nen Breakpoint in die procedure CanChange und schau, ob FMyListView das ist, was es sein soll, um sicher zu stellen, das du nicht von einer ungültigen Klassen Variabel eine Methode aufrufst (assigned(FMyListView) kann zu wenig sein, wenn FMyListView irgendwann mal gültig war und dann .Free aber nicht auf nil gesetzt wurde !)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz