C# – PrintDialog.ShowDialog() funktioniert nicht

Bin gerade auf ein sehr merkwürdiges Problem gestoßen, dass doch locker eine Stunde wertvolle Lebenszeit gekostet hat.
Folgender Code:

PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == DialogResult.OK)
{
    // do nothing

}

Nichts großes, sollte einfach nur so ein Druckerfenster öffnen, wo der Drucker ausgewählt wird etc. Leider öffnete sich der erhoffte Dialog nicht. Der Debugger läuft dahin, aber er führt den ShowDialog() einfach nicht aus.

Wenn ich die Eigenschaft „UseEXDialog“ auf „true“ setze, funktioniert es.
Jedoch wollte ich nicht den XP-Dialog, sondern den anderen. Auch im Netz fand ich keine wirkliche Lösung.
Da diese Codezeilen aus einem bestehenden Projekt stammen, habe ich kurzerhand neue Projekte in den Frameworks 2.0, 3.5 und 4.0 angelegt. Jeweils mit dem Codeschnippsel oben. Und siehe da, es funktioniert problemlos, in jeder Frameworkversion. Nun die Unterschiede gesucht.

Fündig wurde ich den Projekteigenschaften unter „Build“ bzw. „Erstellen“.
Ich muss dazu sagen, dass die Applikation vorher auf einem anderen Rechner mit einem 32-bit Windows entwickelt wurde. So stand hier unter dem Punkt „Platform target:“ (auf Deutsch vermutlich Zielplattform) „Any CPU“.
Stellt die Anwendung hier auf 32-bit (x86) und der PrintDialog() wird hervorragend funktionieren. x64 oder Any CPU funktioniert nicht.
Auf so etwas muss man erstmal kommen, warum das so ist, keine Ahnung.

So habe ich noch mal in der MSDN nachgeschlagen:

This class may not work on AMD64 microprocessors unless you set the UseEXDialog property to true.

Ich bin zwar nun nicht der technisch versierte Mensch, aber für mich hört sich das nach einem Problem mit einem AMD Prozessor an, ich habe jedoch einen Intel (ich lasse es mir aber dennoch gerne erklären).

6 Gedanken zu „C# – PrintDialog.ShowDialog() funktioniert nicht“

  1. Hallo Björn,

    muss damit zu tun haben, das 64-bit Assemblies keine 32-bit Assemblies/DLLs laden können.

    Ist mir eben auf meiner Dev Maschine (Windows 7 x64) aufgefallen. Dachte liegt an Windows 7.
    PrintDialog lief auf unserem Windows 2003 R2 x64 auch nicht.

    Weil die ‚Bit-tigkeit‘ bis jetzt oft nicht beachtet wird, ist der Default in Visual Studio 2010 ja nun auch x86 (AMD64 bzw. x86-64 oder kurz x64 bezieht sich sowohl auf AMD wie auch Intel Prozessoren).

    Die Windows Printing Komponente scheint also nur in 32-bit vorzuliegen. Also wie du schon sagt, entweder UseEXDialog auf true setzen oder Anwendung fest als x86 (per ‚Platform target:‘) laufen lassen.

    Grüße, Max

  2. Danke danke danke! Ich hab ganze 3 Stunden gesucht und den verdammten Fehler einfach nicht gefunden…Danke! 🙂 Da ist die Nacht gerettet!

  3. Danke, der Tipp war Gold wert.
    Ich hatte schon an mir gezweifelt, vor allem, da die Funktion in einem alten Projekt funktioniert hatte, nur das dort die Einstellung X86 eingestellt war.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.