2016-04-20 6 views
0

Ich habe C# Handler-Datei, die einen Pfad (ein lokales Verzeichnis) übergeben wird. Dieser Pfad enthält manchmal ein Bild, manchmal 100. Der Zweck des Handlers besteht darin, eines der Bilder zufällig auszuwählen und es an die Datei slideshow.aspx zurückzugeben, die den Handler aufgerufen hat. Das ist alles, Arbeitssuche, außer in einigen Fällen erhalte ich ‚500‘ Fehler und den folgenden Stack-Trace in Fällen, in denen nur ein Bild vorhanden ist - und manchmal nicht alle:Graf und Zufallsbild aus dem angegebenen Verzeichnis

[ArgumentException: Parameter is not valid.] 
System.Drawing.Bitmap..ctor(String filename) +685715 
SafetyMonitors.GetImage.ProcessRequest(HttpContext context) +213 
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +913 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165 

Hier ist mein Handler-Code:

Ich habe versucht, in dieser IF-Anweisung, um den Fall für nur 1 Bild im Verzeichnis zu behandeln, denken, es muss etwas mit dem Zählen und Random() zu tun haben.

Irgendwelche Ideen? Vielen Dank!

+0

Seltsam, wenn Sie diesen Code nur ein Bild haben, sollten Sie einen Index Out of range Ausnahme geben. Versuchen Sie, _string imgToDisplay = images [images.Length-1]; _ auch Ihre if-Bedingung nicht korrekt zu behandeln, wenn Sie überhaupt kein Bild haben. Sind Sie sicher, dass nur Bilder in diesem Ordner vorhanden sind? – Steve

+0

Versuchte das gleiche Ergebnis. Seltsamerweise, wenn ich die Zeichenfolge fest codiere imgToDisplay = images [0]; Ich bekomme immer noch das gleiche Ergebnis ... 50% der Zeit das Bild, die andere Hälfte '500' Fehler. Und ja, nur ein Bild in diesem Ordner. – cardiac7

Antwort

0

Ihr Code:

if(images.Length == 1) 
    { 
     string imgToDisplay = images[images.Length]; 
     Image img = new Bitmap(imgToDisplay); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      img.Save(ms, ImageFormat.Png); 
      ms.WriteTo(context.Response.OutputStream); 
     } 
    } 

in der zweiten Speicherstelle des Arrays für einen Wert suchen ... erinnern sie sind Null basiert.

sollten Sie verwenden:

string imgToDisplay = images[images.Length-1]; 
+0

Guter Fang, leider sogar mit der obigen Änderung bekomme ich immer noch das gleiche Ergebnis. – cardiac7