2016-08-30 5 views
1

Ich habe eine Xamarin iOS App, die Audio-Dateien von anderen Anwendungen akzeptieren muss. Zum Beispiel: Es akzeptiert Audio (.mp3) -Datei von Mail-App. In der OpenURL Methode habe ich die Funktion, Datei zu speichern und einen neuen Eintrag in XML-Datei zu erstellen. Diese Aufgabe dauert vermutlich länger als 17 Sekunden und die App stürzt ab.iOS app-Delegate-Methode dauert mehr als 17 Sekunden

Es ist ein Kommentar in AppDelegate.cs // You have 17 seconds to return from this method, or iOS will terminate your application.

Hier ist der Code in AppDelegate.cs:

public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation) 
{ 
     return this.Upload(url).Result; 
} 

async public Task<bool> Upload(NSUrl SharedUri) 
{ 
     await SomeUploadTask(); 
     return true; 
} 
+2

Ich habe noch nie mit Xamarin herumgespielt, aber es klingt, als ob du deine App blockierst und diese Funktion als asynchronen Prozess in einem anderen Thread ausführen solltest. Dann können Sie in Ihrer Funktion innerhalb von 17 Sekunden zurückkehren, während diese Aufgabe im Hintergrund ausgeführt wird. Vielleicht hilft dies https://developer.xamarin.com/guides/cross-platform/advanced/async_support_overview/ – Hodson

+1

@Hodson Vielen Dank für die schnelle Antwort, aber ich kann nicht erwarten, eine Aufgabe in openURL-Methode, bekomme ich Fehler: 'The Der Operator 'abwarten' kann nur innerhalb einer asynchronen Methode verwendet werden. Erwägen Sie, diese Methode mit dem Modifizierer 'async' zu markieren und den Rückgabetyp in 'Task ' zu ändern. Wenn ich die asynchrone Methode openURL erstelle, wird ein neuer Fehler ausgegeben. – Arti

+0

@Arti Haben Sie eine Lösung gefunden? Kannst du es bitte posten? – Lijo

Antwort

0

Können Sie das versuchen,

Ich bin nicht sicher, ob das funktioniert oder nicht.

Lassen Sie uns versuchen, eine Methode für mehr Zeit nicht zu blockieren.

Verwandte Themen