Freigeben über


Gewusst wie: Abrufen von Drucksystemobjekt-Eigenschaften ohne Reflektion

Die Aufgliederung der Eigenschaften (und Typen dieser Eigenschaften) eines Objekts mithilfe von Reflektion kann die Anwendungsleistung beeinträchtigen. Der System.Printing.IndexedProperties-Namespace bietet eine Möglichkeit, diese Informationen mithilfe der Reflektion abzurufen.

Beispiel

Dazu müssen die folgenden Schritte ausgeführt werden.

  1. Erstellen Sie eine Instanz des Typs. Im folgenden Beispiel wird der PrintQueue-Typ aus Microsoft .NET Framework verwendet. Für Typen, die Sie von PrintSystemObject ableiten, können Sie den Code leicht anpassen.

  2. Erstellen Sie ein PrintPropertyDictionary aus der PropertiesCollection für diesen Typ. Die Value-Eigenschaft für jeden Eintrag in diesem Wörterbuch ist ein Objekt, das zu einem der von PrintProperty abgeleiteten Typen gehört.

  3. Listen Sie die Member des Wörterbuchs auf. Gehen Sie für jeden Member wie folgt vor.

  4. Wandeln Sie den Wert jedes Eintrags in PrintProperty um, und erstellen Sie damit ein PrintProperty-Objekt.

  5. Rufen Sie den Value-Typ für jedes PrintProperty-Objekt ab.


            ' Enumerate the properties, and their types, of a queue without using Reflection
            Dim localPrintServer As New LocalPrintServer()
            Dim defaultPrintQueue As PrintQueue = LocalPrintServer.GetDefaultPrintQueue()

            Dim printQueueProperties As PrintPropertyDictionary = defaultPrintQueue.PropertiesCollection

            Console.WriteLine("These are the properties, and their types, of {0}, a {1}", defaultPrintQueue.Name, defaultPrintQueue.GetType().ToString() + vbLf)

            For Each entry As DictionaryEntry In printQueueProperties
                Dim [property] As PrintProperty = CType(entry.Value, PrintProperty)

                If [property].Value IsNot Nothing Then
                    Console.WriteLine([property].Name & vbTab & "(Type: {0})", [property].Value.GetType().ToString())
                End If
            Next entry
            Console.WriteLine(vbLf & vbLf & "Press Return to continue...")
            Console.ReadLine()


            // Enumerate the properties, and their types, of a queue without using Reflection
            LocalPrintServer localPrintServer = new LocalPrintServer();
            PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();

            PrintPropertyDictionary printQueueProperties = defaultPrintQueue.PropertiesCollection;

            Console.WriteLine("These are the properties, and their types, of {0}, a {1}", defaultPrintQueue.Name, defaultPrintQueue.GetType().ToString() +"\n");

            foreach (DictionaryEntry entry in printQueueProperties)
            {
                PrintProperty property = (PrintProperty)entry.Value;

                if (property.Value != null)
                {
                    Console.WriteLine(property.Name + "\t(Type: {0})", property.Value.GetType().ToString());
                }
            }
            Console.WriteLine("\n\nPress Return to continue...");
            Console.ReadLine();

Siehe auch

Referenz

PrintProperty

PrintSystemObject

System.Printing.IndexedProperties

PrintPropertyDictionary

LocalPrintServer

PrintQueue

DictionaryEntry

Konzepte

Dokumente in WPF

Übersicht über das Drucken