Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Synchronisierungsfehler zweier Formulare (https://www.delphipraxis.net/193525-synchronisierungsfehler-zweier-formulare.html)

newbieuser 10. Aug 2017 12:14

Synchronisierungsfehler zweier Formulare
 
Hallo an alle,

hab folgendes Problem beim Arbeiten mit zwei Formularen.

Ich erstelle im ersten Formular eine Datei (Frage.db), welche ein Kontingent an Fragen und Antworten enthält.
Diese soll im zweiten Formular ausgelesen werden und die Daten in einer Radiogroup angezeigt werden. An der Stelle kommt es zur Fehlermeldung
"Projekt hat Exception-Klasse ausgelöst mit der Meldung: CheckSynchronize from non-main thread". Das zweite Formular ist im Hauptformular in den uses mit eingebunden.

Hat jemand von euch Ideen zu dem Fehler bzw. wie man diesen beheben könnte?

Glados 10. Aug 2017 12:15

AW: Synchronisierungsfehler zweier Formulare
 
Ich denke keiner von uns kann aus Kaffeesatz lesen.
Du musst uns schon zeigen, bei welchem Aufruf der Fehler stattfindet.

himitsu 10. Aug 2017 12:20

AW: Synchronisierungsfehler zweier Formulare
 
Was wo eingebunden ist (Uses), ist doch erstmal egal.

Zitat:

CheckSynchronize from non-main thread
Das Hauptproblem scheint zu sein, dass DU die VCL irgendwie in einem Thread aufrufst.

Oder versuchst du die VCL teilweise in einer DLL laufen zu lassen?

Zitat:

Delphi-Quellcode:
const
  SCheckSynchronizeError = 'CheckSynchronize wurde vom Thread $%x aufgerufen, der NICHT der Haupt-Thread ist.';

function CheckSynchronize(Timeout: Integer = 0): Boolean;
begin
  ...
  if TThread.CurrentThread.ThreadID <> MainThreadID then
    raise EThread.CreateResFmt(@SCheckSynchronizeError, [TThread.CurrentThread.ThreadID]);


sakura 10. Aug 2017 12:20

AW: Synchronisierungsfehler zweier Formulare
 
Zitat:

Zitat von newbieuser (Beitrag 1378499)
"Projekt hat Exception-Klasse ausgelöst mit der Meldung: CheckSynchronize from non-main thread". Das zweite Formular ist im Hauptformular in den uses mit eingebunden.

Du scheinst mit Threads zu arbeiten. Beachte, dass alle Zugriffe auf VCL-Komponenten (auch Deine Formulare) nur über den Hauptthread der Anwendung erfolgen dürfen. Siehe: Delphi-Referenz durchsuchenSynchronize

...:cat:...

newbieuser 10. Aug 2017 12:25

AW: Synchronisierungsfehler zweier Formulare
 
An dieser Stelle taucht der Fehler auf:

Code:
assignfile(datei,'fragen.db');    
  reset(datei);
  i := 0;
  seek(datei,0);
  while not eof(datei) do            
  begin
    seek(datei,i);
    read(datei,datensatz);
    i := i+1;
    fragen[i].frage := datensatz.frage;
    fragen[i].antwort1 := datensatz.antwort1;
    fragen[i].antwort2 := datensatz.antwort2;
    fragen[i].antwort3 := datensatz.antwort3;
    fragen[i].loesung := datensatz.loesung;
  end;
  closefile(datei);

  radiogroup1.caption := datensatz.frage;
  rb1.caption := datensatz.antwort1;
  rb2.caption := datensatz.antwort2;
  rb3.caption := datensatz.antwort3;

himitsu 10. Aug 2017 12:28

AW: Synchronisierungsfehler zweier Formulare
 
Ich seh da gefühlt 200.000 Zeilen Code und finde die genannte eine "Stelle" nicht.

Und wo der Code drin ist, bzw. wo und wann er ausgeführt wird, ist auch nicht erkennbar.


PS: Die neuere SCheckSynchronizeError-Fehlermeldung ist da bissl aussagefähiger.
Zitat:

CheckSynchronize wurde vom Thread $%x aufgerufen, der NICHT der Haupt-Thread ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz