Unity は子スレッドでメインスレッドのメソッドを呼び出します

Unity では、子スレッドでのメインスレッドのメソッドの呼び出しは、Unity が提供するメインスレッドのタスクキューを使用して実現できます。これは、次の手順に従って行うことができます。

1. デリゲート型を定義し、メインスレッドで実行する必要があるメソッドを宣言します。

public delegate void MainThreadAction();

2. メイン スレッドで実行する必要があるメソッドを格納するために、メイン スレッドで実行されるメイン スレッド タスク キューを作成します。

public static class MainThreadTaskQueue
{
    
    
    private static readonly Queue<MainThreadAction> tasks = new Queue<MainThreadAction>();
    private static readonly object queueLock = new object();

    public static void EnqueueTask(MainThreadAction action)
    {
    
    
        lock (queueLock)
        {
    
    
            tasks.Enqueue(action);
        }
    }

    public static void ExecuteTasks()
    {
    
    
        lock (queueLock)
        {
    
    
            while (tasks.Count > 0)
            {
    
    
                var task = tasks.Dequeue();
                task?.Invoke();
            }
        }
    }
}

3. 子スレッドのメインスレッドのタスクキューを使用して、メインスレッドで実行する必要があるメソッドを呼び出します。

// 示例子线程方法
private void SomeBackgroundThreadMethod()
{
    
    
    // 在子线程中添加任务到主线程任务队列
    MainThreadTaskQueue.EnqueueTask(() =>
    {
    
    
        // 这里是需要在主线程中执行的代码
        MyMethod();
    });
}

// 在主线程 Update 或其他适当的地方执行主线程任务队列中的方法
private void Update()
{
    
    
    MainThreadTaskQueue.ExecuteTasks();
}

: Unity の API のほとんどはメイン スレッドでのみ呼び出すことができるため、スレッド間で呼び出す場合は、メイン スレッドで実行する必要があるコードをデリゲートでラップし、メイン スレッドを介して渡す必要があることに注意してください。 . 実行をスケジュールするためのタスクキュー。また、キュー内のタスクを実行するには、メインスレッド内の適切な場所でメインスレッドのタスクキューの ExecuteTasks メソッド (Update メソッドなど) を必ず呼び出してください。

おすすめ

転載: blog.csdn.net/weixin_44446603/article/details/133325125
おすすめ