none
Problem mit CreateBackgroundUploadAsync ( Live-SDK 5.6) RRS feed

  • Frage

  • 

    Hallo,

     habe Problem mit obigen Code. Beim Aufruf von CreateBackgroundUploadAsync. Nach Aufruf dieser Methode springt das Programm in die  App.g.i.cs Datei(welche vom VS 2013 autom. erzeugt wird) und stoppt bei einem Break-Point. Hier der Code: if (global::System.Diagnostics.Debugger.isAttached) global.System.Diagnostics.Debugger.Break();   Warum springt CreatBackgroundUploadAsync nicht in meine catch-Routine? Danke elu. 


    elu

    Dienstag, 10. März 2015 09:54

Antworten

  • Hallo,
    es gibt einige Exceptions, wenn diese auftreten, kann die App nicht weiter ausgeführt werden. Beispielsweise bei einer OutOfMemoryException. In diesen Fällen springt der Debugger immer in den globalen Exception-Handler. (Zumindest bei den Apps.)

    Um heraus zu bekommen was der Fehler ist, solltest du dir den e-Parameter der Methode ansehen, in der der Code angehalten wird. Dieser enthält das gesamte Exception-Objekte - einfach drauf zeigen um dessen Wert zu erfahren.

    Ich bin mir im Moment nicht ganz sicher, aber es kann auch eine Einstellung des App-Debuggers sein, dass ein catch(Exception) keine Wirkung zeigt. Du müsstest wenn dann den spezifischen Ausnahmetyp abfangen. Also beispielsweise FileNotFoundException o.ä.
    Einfach alles abzufangen hilft weder dir noch dem Benutzer, da du den Fehler nicht auswerten kannst. Daher solltest du das so oder so abändern.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert elu Mittwoch, 11. März 2015 07:27
    Dienstag, 10. März 2015 14:59

Alle Antworten

  • Hallo,
    es gibt einige Exceptions, wenn diese auftreten, kann die App nicht weiter ausgeführt werden. Beispielsweise bei einer OutOfMemoryException. In diesen Fällen springt der Debugger immer in den globalen Exception-Handler. (Zumindest bei den Apps.)

    Um heraus zu bekommen was der Fehler ist, solltest du dir den e-Parameter der Methode ansehen, in der der Code angehalten wird. Dieser enthält das gesamte Exception-Objekte - einfach drauf zeigen um dessen Wert zu erfahren.

    Ich bin mir im Moment nicht ganz sicher, aber es kann auch eine Einstellung des App-Debuggers sein, dass ein catch(Exception) keine Wirkung zeigt. Du müsstest wenn dann den spezifischen Ausnahmetyp abfangen. Also beispielsweise FileNotFoundException o.ä.
    Einfach alles abzufangen hilft weder dir noch dem Benutzer, da du den Fehler nicht auswerten kannst. Daher solltest du das so oder so abändern.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert elu Mittwoch, 11. März 2015 07:27
    Dienstag, 10. März 2015 14:59
  • Hallo,

    danke erst Mal für den Tip. Die Exception lautet:

    "System.ArgumentException: Value does not fall within the expected range.". Was mich wundert ist, dass, wenn ich den Befehl "sw.Write(buffer,0,204);" auf "sw.Write(buffer,0,203);" ändere, es dann zu keiner Exception kommt und die Datei auf Sky-Drive abgelegt wird. Der buffer ist  mit "char[] buffer=new char[256];"  angelegt. Die MemoryStream Größe ändert sich dabei von 256 auf 255.

    Wenn ich den Befehl "MemoryStream ms = new MemoryStream();"  durch "MemoryStream ms = new MemoryStream(buffer);" ersetze, dann gibt's keine Probleme. Somit ist der Absturz durch das Schreiben mit Write in den MemoryStream passiert.

    Danke nochmal Tom.

    LG

    elu


    elu

    Mittwoch, 11. März 2015 07:27
  • Hallo,

    habe noch einen Zusatz, wenn ich den MemoryStream ms mit Streamwriter sw (sw.WriteLine(...)) fülle und dann per

    LiveUploadOperation uploadOperation = await   liveConnectClient.CreateBackgroundUploadAsync("me/skydrive"
                            , "BPre.txt", ms.AsInputStream() , OverwriteOption.Overwrite);

    ins SkyDrive übertrage, dann kommt es zu obiger Exception. Wenn ich jedoch einen neuen MemoryStream msTemp

    mit msTemp = new MemoryStream(ms.ToArray());  und anschließend wieder

    LiveUploadOperation uploadOperation = await   liveConnectClient.CreateBackgroundUploadAsync("me/skydrive"
                            , "BPre.txt", msTemp.AsInputStream() , OverwriteOption.Overwrite);

    ausführe, dann funktioniert's. Ich kann zwar damit leben, aber interessieren würde es mich warum das so ist.

    lg

    elu


    elu

    Mittwoch, 11. März 2015 10:00