none
Fehler "Die angeforderte Resource wird bereits verwendet" RRS feed

  • Allgemeine Diskussion

  • Hallo und danke fürs Reinschauen

    Ich möchte meine Fotos vom Smartphone auf den PC synchronisieren. Unter codegur.net/26514869/accessing-an-mtp-device-in-visual-basic-net fand ich dazu eine schöne Vorlage für die Auflistung der Smartphone-Dateien und deren Download. Leider kann ich mit der dortigen (unten aufgelisteten) Download-Prozedur nur gerade eine einzige Foto auf den PC downloaden, bei jedem weiteren Durchgang dieser Prozedur erhalte ich an der bezeichneten Stelle die Fehlermeldung "Die angeforderte Resource wird bereits verwendet". Damit beginnen meine Probleme, denn ich programmiere in VB.NET und binde diese C#-Prozedur nur in mein VisualStudio-VB.NET-Projekt ein, von C# verstehe ich so gut wie nichts. Deshalb meine Anfänger-Frage: Welche Resourcen muss ich wie wieder freigeben? 

    Danke für alle Tipps

    Bernhard

            public void DownloadFile(PortableDeviceFile file, string saveToPath)
            {
                IPortableDeviceContent content;
                this._device.Content(out content);
    
                IPortableDeviceResources resources;
                content.Transfer(out resources);
    
                PortableDeviceApiLib.IStream wpdStream;
                uint optimalTransferSize = 0;
    
                var property = new _tagpropertykey();
                property.fmtid = DeviceGUID.PDDefault;
                property.pid = 0;            
                
                resources.GetStream(file.Id, ref property, 0, ref optimalTransferSize, out wpdStream);   //<--- Hier die Fehlermeldung
    
                System.Runtime.InteropServices.ComTypes.IStream sourceStream = (System.Runtime.InteropServices.ComTypes.IStream) wpdStream;
    
                var filename = file.Name;
                FileStream targetStream = new FileStream(Path.Combine(saveToPath, filename), FileMode.Create, FileAccess.Write);
                    
                unsafe
                {
                    var buffer = new byte[1024];
                    int bytesRead;
                    do
                    {
                        sourceStream.Read(buffer, 1024, new IntPtr(&bytesRead));
                        targetStream.Write(buffer, 0, 1024);
                    } while (bytesRead > 0);
                    targetStream.Close();
                }
                
            }


    Dienstag, 1. März 2016 16:35

Alle Antworten

  • Hallo Bernhard Grüter,

    ich habe noch ein bisschen rumprobiert, bin aber nicht wirklich weitergekommen. Ich hoffe dass, jemand mit großer Erfahrung diesen Tread sieht und helfen kann. 

    Gruß

    Aleksander


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 2. März 2016 13:30
  • Hallo

    was mir auffällt ist das du die Handles für wpdStream und resources nicht schließt

    wpdStream.Close();

    bei resources must du mal gucken ob es da etwas wie Close() oder Dispose() gibt.

    Mittwoch, 2. März 2016 13:53
  • Hi,

    Danke für die Antworten. Die Idee mit "dispose" hab ich auch schon verfolgt. Leider bietet IntelliSense für wpdStream überhaupt nichts in dieser Richtung an, für resources nur ein .delete, was vermutlich was anderes bedeutet und einen Syntaxfehler ergibt ("Nur assignment-, call-, increment-, decrement-, await- und 'new object'-Ausdrücke können als Anweisung verwendet werden").

    Gedacht wird aber in die richtige Richtung. Per Zufall habe ich nämlich herausgefunden, dass ein "device.Disconnect", direkt gefolgt von "device.Connect" zwischen je zwei Downloads die Download-Prozedur nicht mehr aufhält. Das zwingt mich zwar, zuerst die File-Struktur des Smartphones zu erstellen und erst dann alle Fotos downzuloaden (statt parallel), aber damit kann ich schlimmstenfalls leben. Interessieren würde es mich trotzdem, was am Code falsch ist...

    Schöner Abend,

    Bernhard

    Mittwoch, 2. März 2016 18:55