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();
然后就可以正常工作了!
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();
然后就可以正常工作了!