Re: Physikalischen Druckbereich feststellen??
- From: "Herfried K. Wagner [MVP]" <hirf-spam-me-here@xxxxxx>
- Date: Fri, 21 Apr 2006 11:35:54 +0200
Hallo Karsten!
"Karsten Sosna" <k.sosna-NO-SPAM-@xxxxxxxxxxx> schrieb:
in der ganzen Routine besteht keine Möglichkeit, das sich das Handle ändert, warum sollte ich dann den Context nicht sofort wieder freigeben?
Weil 'GetDeviceCaps' eine gültige Gerätekontextzugriffsnummer erwartet! Dass der Code funktioniert, wenn er das überhaupt tut, ist Zufall.
die Zugriffsnummer kann sich während des Abarbeiten der Routine nicht ändern. Natürlich funktioniert die Routine, warum auch nicht? Die Nummer war ja beim Betreten der Routine gültig.
Sie wird aber durch Aufruf von 'ReleaseDC' ungültig, weil der Gerätekontext freigegeben wird.
Ich übergebe ja ein Objekt, welches mir eine Zugriffsnummer liefern kann. Wäre fatal wenn ich mir das Handle hole und dies sich während der Abarbeitung einer Routine ändern würde.
Sogar das ist möglich, wenn von einem anderen Thread aus während der Ausführung das Fenster, dem der Gerätekontext zugeordnet ist, neu erstellt wird und damit auch die Gerätekontextzugriffsnummer ungültig werden würde. Deshalb sollte man 'Graphics'-Objekte und auf deren Basis ermittelte Zugriffsnummern in .NET-basierenden Anwendungen auch nicht "zwischenspeichern" und immer wieder verwenden, sondern dies nur in atomaren Codestücken tun. Ähnlich verhält es sich, indem du den Gerätekontext freigibst und danach dessen Eigenschaften abfragst.
Oder soll ich darauf warten, dass ein Funktionsaufruf oder eine
Berechnung fehlschlägt und ich den Context gar nicht mehr freigeben kann?
Was spricht dagegen, die Freigabe in einen 'Finally'-Block eines 'Try...Catch'-Blocks zu packen?
Man kann auch unnötig viele Try-Catch-Böcke einbauen und dafür sorgen das der Aufrufer auch mitbekommt das eine Exception geworfen wurde.
\\\
Try
Call Test(...
Catch ex As Exception
...
End Try
...
Private Sub Test(...
Try
...
Catch ex As Exception
Throw ex
Besser: 'Throw'.
Habe nichts gegen Code-Sicherheit, aber man kann es auch übertreiben.
Ich habe etliche Routinen im Einsatz(gerade im Bereich GDI) die sich die Nummer des DeviceContext holen und sofort! den Context wieder freigeben, alle laufen ohne Probleme.
Wie gesagt, ich halte dies für problematisch und ich würde mich nicht darauf verlassen, dass es immer funktioniert.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
.
- Follow-Ups:
- Re: Physikalischen Druckbereich feststellen??
- From: Karsten Sosna
- Re: Physikalischen Druckbereich feststellen??
- From: Thomas Scheidegger [MVP]
- Re: Physikalischen Druckbereich feststellen??
- References:
- Physikalischen Druckbereich feststellen??
- From: harald
- Re: Physikalischen Druckbereich feststellen??
- From: Karsten Sosna
- Re: Physikalischen Druckbereich feststellen??
- From: Herfried K. Wagner [MVP]
- Re: Physikalischen Druckbereich feststellen??
- From: Karsten Sosna
- Re: Physikalischen Druckbereich feststellen??
- From: Herfried K. Wagner [MVP]
- Re: Physikalischen Druckbereich feststellen??
- From: Karsten Sosna
- Physikalischen Druckbereich feststellen??
- Prev by Date: ARGB-Wert konvertieren zu VB6 Color
- Next by Date: Re: ARGB-Wert konvertieren zu VB6 Color
- Previous by thread: Re: Physikalischen Druckbereich feststellen??
- Next by thread: Re: Physikalischen Druckbereich feststellen??
- Index(es):
Relevant Pages
|