我有一个故事板应用程序。在启动时加载第一个视图时,我有以下代码实例化我的主后台线程,并且一切正常。

    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()。我以为它只能被调用一次...在哪里启动我的主后台线程,因此它只能被启动一次?

最佳答案

每次从情节提要/ segue中加载该视图的新实例时,都会调用AwakeFromNib。如果要在情节提要中进行排序,则应该期望每次都调用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();
}

10-02 01:47
查看更多