2009-03-10 6 views
0

Ich untersuche derzeit ein Problem mit einer Drittanbieter-Komponente (DevExpress) in meiner Anwendung. Mein Problem ist sehr ähnlich zu diesem DevExpress KB article. Ich bekomme die gleiche Ausnahme mit weniger weniger Stacktrace. Also habe ich .NET Reflector verwendet, um herauszufinden, was in diesem Szenario null sein kann, und das einzige Objekt, das ein Kandidat ist, null zu sein, ist Graphics. Dies wird mit Graphics.FromHwnd (IntPtr.Zero) erstellt. Da ich kein umfassendes Wissen über GDI habe, würde ich gerne wissen, ob mir jemand mögliche Szenarien sagen kann, wenn dies null zurückgibt ...Graphics.FromHwnd (IntPtr.Zero) gibt null zurück, warum?

Ich habe versucht, es in einem Szenario zu reproduzieren, wo Windows aus GDI ist Griff, aber ich bin immer eine „out of handles“ dann - Ausnahme mindestens einmal, was nicht der Fall in der Frage ist ich unter

tia, Martin

+0

Was genau versuchen Sie zu tun? Auf den Desktop zeichnen? Den Desktop erfassen? Was? –

+0

Nein, der Aufruf von Graphics.FromHwnd ist tief im DevExpress-Code eingebettet, und ich versuche herauszufinden, was ich falsch machen könnte, damit dieser Aufruf null zurückgibt. Später hängt DevExpress-control von diesem Objekt ab und daher tritt die NullReferenceException auf. –

Antwort

0

Soweit ich mich erinnere, ist ein HWND von 0 (effektiv IntPtr.Zero) ein Handle auf dem Desktop der aktuellen Benutzersitzung. Es kann verwendet werden, um verschiedene Metriken des Systems zu messen, und es sollte ein gültiger Wert für Graphics.FromHwnd sein.

Allerdings ist GDI + so voller Fehler und die .NET-Integration ist so instabil, dass es sehr wahrscheinlich ist, dass nichts mit Ihrem Code oder DevExpress anders ist als nur GDI +.

0

Zunächst einmal sind Sie Verwenden Sie die IntPtr Struktur und initialisieren sie auf Null. Dann übergeben Sie dieses Handle an die Graphics-Klasse. Es sei denn, Sie haben ein Fenster mit einem handle == 0, ein null Wert ist genau das, was ich erwarten würde.