von Toxitom » Sa, 30.12.2006 11:52
Hey zusammen,
nur ein bischen was zur Erläuterung:
mit .dispose() wird ein Objekt im Hauptspeicher komplett "zerstört", also auch entfernt. Dies ist eine "sehr harte" Methode und in der Regel nicht notwendig, da OOo selbst für die bestmögliche Speicherverwaltung sorgt und nicht mehr benötigte Objekte bei Bedarf aus dem Speicher entfernt.
Dispose() sollte also eigentlich gar nicht verwendet werden, höchstens in Fällen, wo sonst nichts anderes mehr geht.
Die close() Methode (die wäre hier durchaus richtig!) beendet eine Applikation ordnungsgemäß, wobei sie nur dann beendet werden kann, wenn kein anderer Prozess "Widerspruch" einlegt, eine sogenannte CloseVetoException. Beim Formular ist das z.B. eine noch bestehende Datenverbindung. Die muss zuerst geschlossen werden, bevor der Close-Befehl auf das Dokument ausgeführt weren kann.
Mit dem Parameter "True" der Close-Methode wird die Verantwortung zum Schliessen des Dokumentes an den Prozess weitergegeben, der die CloseVetoException ausgelöst hat - das bedeutet, das Dokument beendet sich normalerweise, wenn der Prozess selbst beendet wird. Klappt aber nicht immer

Übergebt ihr "False", so müsst ihr selbst dafür sorgen, dass das Dokument ordnungsgemäß geschlossen wird, wenn der Prozess beendet ist. Das geht dann eigentlich nur mit entsprechenden Schleifen, die solangge laufen, bis kein "Veto" von anderen Prozessen mehr vorhanden ist.
Ich denke, die Lösung, zuerst die Datenverbindungen zu schliessen, ist schon sehr gut. Vielleicht reicht schon, ein kurzes wait() noch einzubauen, und dann das Dokument normal zu schliessen (mit close(true)).
Das wäre sicher besser, als mit Dispose das Objekt zu zerstören und dadurch eventuell noch laufende Prozesse "in der Lusft hängen zu lassen"
Viele Grüße
Thomas
Hey zusammen,
nur ein bischen was zur Erläuterung:
mit .dispose() wird ein Objekt im Hauptspeicher komplett "zerstört", also auch entfernt. Dies ist eine "sehr harte" Methode und in der Regel nicht notwendig, da OOo selbst für die bestmögliche Speicherverwaltung sorgt und nicht mehr benötigte Objekte bei Bedarf aus dem Speicher entfernt.
Dispose() sollte also eigentlich gar nicht verwendet werden, höchstens in Fällen, wo sonst nichts anderes mehr geht.
Die close() Methode (die wäre hier durchaus richtig!) beendet eine Applikation ordnungsgemäß, wobei sie nur dann beendet werden kann, wenn kein anderer Prozess "Widerspruch" einlegt, eine sogenannte CloseVetoException. Beim Formular ist das z.B. eine noch bestehende Datenverbindung. Die muss zuerst geschlossen werden, bevor der Close-Befehl auf das Dokument ausgeführt weren kann.
Mit dem Parameter "True" der Close-Methode wird die Verantwortung zum Schliessen des Dokumentes an den Prozess weitergegeben, der die CloseVetoException ausgelöst hat - das bedeutet, das Dokument beendet sich normalerweise, wenn der Prozess selbst beendet wird. Klappt aber nicht immer ;-)
Übergebt ihr "False", so müsst ihr selbst dafür sorgen, dass das Dokument ordnungsgemäß geschlossen wird, wenn der Prozess beendet ist. Das geht dann eigentlich nur mit entsprechenden Schleifen, die solangge laufen, bis kein "Veto" von anderen Prozessen mehr vorhanden ist.
Ich denke, die Lösung, zuerst die Datenverbindungen zu schliessen, ist schon sehr gut. Vielleicht reicht schon, ein kurzes wait() noch einzubauen, und dann das Dokument normal zu schliessen (mit close(true)).
Das wäre sicher besser, als mit Dispose das Objekt zu zerstören und dadurch eventuell noch laufende Prozesse "in der Lusft hängen zu lassen" ;-)
Viele Grüße
Thomas