Comment : obtenir les propriétés de l'objet de système d'impression sans réflexion

L'utilisation de la réflexion pour détailler les propriétés (et les types de ces propriétés) sur un objet peut ralentir les performances de l'application. L'espace de noms System.Printing.IndexedProperties permet d'obtenir ces informations à l'aide de la réflexion.

Exemple

Les étapes de cette procédure sont les suivantes :

  1. Créer une instance du type. Dans l'exemple ci-dessous, le type est le type PrintQueue fourni avec Microsoft .NET Framework, mais un code presque identique doit fonctionner pour les types que vous dérivez de PrintSystemObject.

  2. Créez un PrintPropertyDictionary à partir de la PropertiesCollection du type. La propriété Value de chaque entrée dans ce dictionnaire est un objet de l'un des types dérivés de PrintProperty.

  3. Énumérer les membres du dictionnaire. Pour chacun d'eux, procédez comme suit.

  4. Effectuez un cast de la valeur de chaque entrée sur PrintProperty et utilisez-le pour créer un objet PrintProperty.

  5. Récupérez le type de Value de chaque objet PrintProperty.


            ' 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();

Voir aussi

Référence

PrintProperty

PrintSystemObject

System.Printing.IndexedProperties

PrintPropertyDictionary

LocalPrintServer

PrintQueue

DictionaryEntry

Concepts

Documents dans WPF

Vue d'ensemble de l'impression