0

ストーリーボードアプリケーションがあります。起動時に最初のビューが読み込まれると、メインのバックグラウンドスレッドをインスタンス化するためのこのコードがあり、すべて正常に機能します。

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

ただし、ユーザーが別のビューに移動してから、セグエを介して最初のビューに戻ると、AwakeFromNib()が再度呼び出されます。一度だけ呼び出されるはずだと思っていました...メインのバックグラウンドスレッドをどこから始めれば、一度だけ開始されるのでしょうか?

4

1 に答える 1

2

AwakeFromNibそのビューの新しいインスタンスがストーリーボード/セグエからロードされるたびに呼び出されます。AwakeFromNibストーリーボードでセグエを行っている場合は、nib オブジェクトから実際にビューの新しいインスタンスを作成しているため、毎回呼び出されることを期待する必要があります。バックグラウンド スレッドを開始する場合は、次のような方法を試すことができます。

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();
}
于 2012-05-20T02:52:16.823 に答える