Xamarin Forms:如果页面在后台,线程不会执行

Xamarin Forms: Thread not executed if page in background

Xamarin.Forms 中线程的一些非常奇怪的问题:

MainPage 使用

在新的 Thread 中从主线程(~每 2 分钟)执行一个动作
Debug.Writeline("now before ThreadPool");

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

但是,如果另一个页面在顶部:

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

(因此 background/disappeared 中的 MainPage),上面的 "workitem" 永远不会执行!最后的调试日志文本实际上是 "now before ThreadPool",但未记录 "in thread!"(因为某些奇怪的原因线程未执行...)。

没有错误,只是没有执行。如果 MainPage 在前台,则一切正常。 有什么想法吗?

好吧,Xamarin 的 ThreadPool 实现中似乎存在一个错误(或者至少是一些意外的限制):

如果我把上面的ThreadPool.QueueUserWorkItem换成

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

        })).Start();

然后就可以正常工作了!