热门搜索 :
考研考公
您的当前位置:首页正文

【Unity】在主线程调用

来源:东饰资讯网

在收到服务器消息时,有可能不是在主线程,所以逻辑需要在主线程中调用才安全,这个类就是用来干这个事的

  • OnUpdate方法需要在Monobehaviour类中进行调用
  • SingletonTemplate为单例模板,自己写一个单例也行
using System;
using System.Collections.Concurrent;
using System.Threading;

/// <summary>
/// 主线程工具类
/// </summary>
public class ThreadManager : SingletonTemplate<ThreadManager>
{
    private readonly ConcurrentQueue<Action> queue = new ConcurrentQueue<Action>();

    private readonly  int mainThreadId = Thread.CurrentThread.ManagedThreadId;

    private Action a;

    /// <summary>
    /// 在主线程调用函数
    /// </summary>
    /// <param name="action"></param>
    public void InvokeInMainThread(Action action)
    {
        if (Thread.CurrentThread.ManagedThreadId == mainThreadId)
        {
            action.Invoke();
            return;
        }

        queue.Enqueue(action);
    }

    public void OnUpdate()
    {
        while (true)
        {
            if (!queue.TryDequeue(out a))
            {
                return;
            }

            a.Invoke();
        }
    }
}

Top