Xamarin表单:如果页面在后台,则不执行线程

时间:2017-01-10 17:09:43

标签: xamarin xamarin.forms threadpool

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);

(因此MainPage在后台/消失了),以上"工作项目"永远不会被执行!最后的调试日志文本实际上是"现在在ThreadPool"之前,但是"在线程中!"未记录(因为某些奇怪的原因,线程未被执行...)。

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

1 个答案:

答案 0 :(得分:0)

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

如果我用

替换上述ThreadPool.QueueUserWorkItem
new System.Threading.Thread(new System.Threading.ThreadStart(() =>
        {
           Debug.Writeline("in thread!");                 
           action1();

        })).Start();

然后它运作得很好!