• Unity 在子线程中调用主线程的方法


    Unity 中,在子线程中调用主线程的方法,可以通过使用 Unity 提供的主线程任务队列来实现。这可以通过以下步骤完成:

    1、定义一个委托类型,在其中声明需要在主线程中执行的方法。

    public delegate void MainThreadAction();
    
    • 1

    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();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3、在子线程中使用主线程任务队列调用需要在主线程执行的方法。

    // 示例子线程方法
    private void SomeBackgroundThreadMethod()
    {
        // 在子线程中添加任务到主线程任务队列
        MainThreadTaskQueue.EnqueueTask(() =>
        {
            // 这里是需要在主线程中执行的代码
            MyMethod();
        });
    }
    
    // 在主线程 Update 或其他适当的地方执行主线程任务队列中的方法
    private void Update()
    {
        MainThreadTaskQueue.ExecuteTasks();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    说明:需要注意的是,由于 Unity 的 API 大多数是只能在主线程中调用的,因此在跨线程调用时,需要将需要在主线程中执行的代码包装在一个委托中,并通过主线程任务队列进行调度执行。另外,确保在主线程合适的地方(如 Update 方法)调用主线程任务队列的 ExecuteTasks 方法,以便执行队列中的任务。

  • 相关阅读:
    leetcode:45. 跳跃游戏II
    jdk版本与class文件格式major版本对应关系
    卷积神经网络激活层作用,卷积神经网络激活函数
    11、Java——吃货联盟订餐系统(对象+数组)
    Apache的配置详解
    【零散技术】10分钟学会odoo的原型继承
    LeetCode 136. 只出现一次的数字
    (12)点云数据处理学习——表面重建
    宝玉:Sora 如何改变我们的生活
    memcpy的使⽤和模拟实现
  • 原文地址:https://blog.csdn.net/weixin_44446603/article/details/133325125