2009-07-31 5 views
1

Der folgende Code löst eine Ausnahme nennen ...Silverlight 3 IncreaseQuotaTo schlägt fehl, wenn ich AvailableFreeSpace erste

private void EnsureDiskSpace() 
{ 
    using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForSite()) 
    { 
     const long NEEDED = 1024 * 1024 * 100; 

     if (file.AvailableFreeSpace < NEEDED) 
     { 
      if (!file.IncreaseQuotaTo(NEEDED)) 
      { 
       throw new Exception(); 
      } 
     } 
    } 
} 

Aber dieser Code nicht (es zeigt die Silverlight "Erhöhung Quote" Dialog) ...

private void EnsureDiskSpace() 
{ 
    using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForSite()) 
    { 
     const long NEEDED = 1024 * 1024 * 100; 

     if (file.Quota < NEEDED) 
     { 
      if (!file.IncreaseQuotaTo(NEEDED)) 
      { 
       throw new Exception(); 
      } 
     } 
    } 
} 

Der einzige Unterschied im Code ist, dass der erste überprüft file.AvailableFreeSpace und der zweite überprüft file.Quota.

Sie dürfen den verfügbaren Speicherplatz nicht prüfen, bevor Sie mehr anfordern? Es scheint, als hätte ich ein paar Beispiele im Internet gesehen, die zuerst den verfügbaren Platz testen. Wird dies in SL3 nicht mehr unterstützt? Meine Anwendung ermöglicht es Benutzern, Dateien von einem Server herunterzuladen und lokal zu speichern. Ich möchte das Kontingent wirklich um 10% erhöhen, wenn der Benutzer kein sapce mehr hat. Ist das möglich?

Antwort

0

Es stellt sich heraus, dass beide Codeblöcke funktionieren ... es sei denn, Sie legen einen Unterbrechungspunkt fest. In diesem Fall schlagen beide Codeblöcke fehl, wenn Sie einen Unterbrechungspunkt setzen.

0

Ich glaube, dass sich das Verhalten in Silverlight 3 etwas geändert hat, aber ich habe mich nicht ganz sicher mit diesen Funktionen beschäftigt.

Ich habe einen Blick auf diese MSDN page on the feature und der empfohlene Ansatz ist definitiv das erste Beispiel, das Sie haben; sie sind darauf hindeutet:

  1. Benutzerspeicher
  2. Erhalten Sie prüfen AvailableFreeSpace Eigenschaft auf dem Speicher
  3. Bei Bedarf rufen IncreaseQuotaTo

Es ist nicht ideal, da kann man nicht Implementieren Sie Ihren eigenen Wachstumsalgorithmus (Wachstum um 10% usw.), aber Sie sollten zumindest in der Lage sein, Ihr Szenario mithilfe der AvailableFreeSpace-Eigenschaft zu entsperren, wie Sie sagen.

Ich glaube, das Lesen der Menge an verfügbarem Speicherplatz (die Quota) für den Benutzerspeicher könnte theoretisch ein Problem sein, stellen Sie sich ein "Rogue" -Steuerelement oder eine App vor, die einfach jedes letzte Byte in den isolierten Speicher füllen möchte Leerzeichen, wodurch der Benutzer gezwungen ist, mehr Speicherplatz anzufordern, auch wenn er nicht verfügbar ist.

1

Es gibt einen kleinen Fehler in Ihrem ersten Beispiel.

Möglicherweise ist nicht genügend Speicherplatz vorhanden, um den neuen Speicher hinzuzufügen und die Anforderung auszulösen. Der angeforderte Betrag ist jedoch möglicherweise niedriger als das vorhandene Kontingent. Dies löst die Ausnahme aus und zeigt das Dialogfeld nicht an.

Die richtige Linie würde

file.IncreaseQuotaTo(file.Quota + NEEDED); 
4

Ich hatte das gleiche Problem. Die Lösung für mich war etwas in den Hilfedateien geschrieben. Die Erhöhung des Datenträgerkontingents muss von einer Benutzerinteraktion wie einem Button-Klick-Ereignis ausgelöst werden. Ich habe eine erhöhte Festplattenkontingent von einem asynchronen WCF-Aufruf angefordert. Durch Verschieben der Speicherplatzanforderung auf eine Schaltfläche klicken Sie auf den Code.

In meinem Fall, wenn die WCF erkannt, dass nicht genug Platz war, informiert die Silverlight App den Benutzer, dass sie Raum durch einen Klick auf eine Schaltfläche erhöhen musste. Als die Schaltfläche geklickt wurde und der Speicherplatz erhöht wurde, rief ich den WCF-Dienst erneut an und wusste, dass ich jetzt mehr Platz hatte. Nicht so gut eine Benutzererfahrung, aber es hat mich über dieses Problem hinaus.

Verwandte Themen