2012-05-19 45 views
0

我有一个故事板应用程序。当第一个视图在启动时加载时,我有这段代码来实例化我的主后台线程,它一切正常。为什么AwakeFromNib在使用故事板时会反复调用?

public override void AwakeFromNib() 
    { 
     base.AwakeFromNib(); 
     // Perform one-time initialization in this function 

     // Create and start the main worker thread 
     MainBackgroundThread = new Thread(new ThreadStart(MainLoop.RunWorker)); 
     MainBackgroundThread.Start(); 
    } 

但是,当用户进入到不同的视图,并且然后经由一个SEGUE追溯到第一视图,AwakeFromNib()被再次调用。我以为它只应该被称为一次...我在哪里开始我的主要后台线程,所以它只能开始一次?

回答

2

AwakeFromNib将在每次从故事板/ segue加载该视图的新实例时调用。如果您在故事板中继续播放,则应该期望每次都调用AwakeFromNib,因为您是从一个笔尖对象真正创建视图的新实例。如果你想启动一个后台线程,你可以尝试这样的:

public override void AwakeFromNib() 
{ 
    static NSThread * thread; 

    base.AwakeFromNib(); 
    // Perform one-time initialization in this function 

    // Create and start the main worker thread 
    if(!thread) 
    { 
     thread = new Thread(new ThreadStart(MainLoop.RunWorker)); 
    } 

    MainBackgroundThread = thread; 
    MainBackgroundThread.Start(); 
} 
+0

谢谢!你的修复效果很好! – nbonwit

相关问题