2017-01-10 13 views
0

Einige sehr merkwürdige Ausgabe mit Threading in Xamarin.Forms:Xamarin Forms: Thread nicht ausgeführt, wenn Seite im Hintergrund

Vom MainPage eine Aktion aus dem Haupt-Thread ausgeführt wird (~ alle 2 Minuten) in einem neuen Thread mit

Debug.Writeline("now before ThreadPool"); 

ThreadPool.QueueUserWorkItem(o => 
      { 
       Debug.Writeline("in thread!"); 
       action1(); //takes ~ 2-3 seconds to excecute 
      }); 

wenn jedoch ein andere Seite auf der Oberseite ist:

Navigation.PushAsync(new SettingsPage(), true); 

(und daher Mainpage im Hintergrund/verschwunden), das abo "workitem" wird nie ausgeführt! Der letzte Debug-Log-Text ist eigentlich "jetzt vor ThreadPool", aber "in thread!" wird nicht protokolliert (weil aus irgendeinem seltsamen Grund der Thread nicht ausgeführt wird ...).

Es gibt keinen Fehler, es wird einfach nicht ausgeführt. Wenn MainPage im Vordergrund ist, funktioniert alles einwandfrei. Irgendwelche Ideen?

+1

Wie drücken Sie eine Seite über die aktuelle Seite? Bitte fügen Sie etwas mehr Code in Ihren Beitrag, der so zeigt – Demitrian

+0

@demitrian: hinzugefügt einige Code – fritz

Antwort

0

Ok, es scheint, gibt es einen Fehler (oder zumindest einige unerwartete Begrenzung) in Xamarin der Thread Umsetzung:

Wenn ich ersetzen die oben ThreadPool.QueueUserWorkItem mit

new System.Threading.Thread(new System.Threading.ThreadStart(() => 
     { 
      Debug.Writeline("in thread!");     
      action1(); 

     })).Start(); 

dann funktioniert es ganz gut!

+1

Eine andere Möglichkeit, dies zu tun, werde ich in der Regel 'Task.Factory.StartNew()', um eine Hintergrundaufgabe zu starten. – BrewMate

Verwandte Themen