2009-05-27 6 views
3

J'ai une partie de code comme ceciPourquoi je reçois Stream en tant que System.IO.UnmanagedMemoryStream?

 Assembly myAssembly = Assembly.GetExecutingAssembly(); 
     string[] names = myAssembly.GetManifestResourceNames(); 
     foreach (string file in names) 
     { 
      if (file.EndsWith(".dtd")) 
      { 
       // attach to stream to the resource in the manifest 
        dtdStream = myAssembly.GetManifestResourceStream(file); 
        MessageBox.Show(dtdStream.ToString()); 
      }     
     } 

j'ai tous les fichiers sous mes ressources dtd folder.Which a construire le type de ressources intégré.
Maintenant, quand je debug le code que je reçois une boîte de message montrant System.IO.UnmanagedMemoryStream

Mais je veux un MemoryStream géré?
Qu'est-ce qui ne va pas dans mon code?
Merci ...

+0

Pourquoi voulez-vous un flux de mémoire gérée? –

Répondre

8

Les ressources sont compilées dans le cadre de l'assemblage (EXE ou DLL), ce qui signifie qu'elles sont chargées dans la mémoire non managée lorsque le système d'exploitation démarre le processus. C'est la raison pour laquelle tout flux retourné par GetManifestResourceStream doit donc être non géré (de type UnmanagedMemoryStream).

Quel est le problème avec cela, de toute façon? L'interface de MemoryStream et UnmanagedMemoryStream est fondamentalement identique, et ce n'est que la fonctionnalité (cachée) qui diffère, ce qui ne devrait pas avoir de conséquences pour vous.

+0

Si possible, puis-je obtenir le flux retourné par GetManifestResourceStream comme géré? Si oui alors comment? –

+0

@crazy_itgal: Oui, mais ce ne serait pas joli, et n'offrirait aucun avantage que je pourrais envisager (et ne créer que des frais généraux). (Pour quoi pensez-vous que cela aidera?) Quoi qu'il en soit, la méthode de base serait de lire le UnmanagedMemoryStream et d'écrire tout dans un objet MemoryStream. – Noldorin

+0

Si j'ai besoin de lire une image à partir d'un flux de ressources, je devrai utiliser UnmanagedMemoryStream pour initialiser BitmapImage, qui n'accepte que MemoryStream comme paramètre du constructeur. – ziyuang