版权声明:转载或者引用本文内容请注明来源及原作者 https://blog.csdn.net/TIANHUNYISHUI/article/details/88814812
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Framework {
/// <summary>
/// 框架核心
/// </summary>
public sealed class Core : MonoSingleton<Core> {
/// <summary>
/// 调用队列
/// </summary>
private static Queue<InvokeObject> m_InvokeQueue;
protected override void Awake () {
base.Awake ();
DontDestroyOnLoad (gameObject);
m_InvokeQueue = new Queue<InvokeObject> ();
}
private void OnDestroy () {
m_InvokeQueue = null;
}
// Update is called once per frame
void Update () {
while (m_InvokeQueue.Count > 0) {
lock (m_InvokeQueue) {
InvokeObject excuteObject = m_InvokeQueue.Dequeue ();
excuteObject.callback.Invoke (excuteObject.arg);
}
}
}
/// <summary>
/// 子线程调用
/// </summary>
/// <param name="callback">回调函数</param>
/// <param name="arg">回调参数</param>
/// <returns>返回调用结果</returns>
public static bool Invoke (Action<object> callback, object arg = null) {
if (m_InvokeQueue == null)
return false;
lock (m_InvokeQueue) {
InvokeObject excuteObject = new InvokeObject {
callback = callback,
arg = arg
};
m_InvokeQueue.Enqueue (excuteObject);
}
return true;
}
/// <summary>
/// 调用对象
/// </summary>
private class InvokeObject {
/// <summary>
/// 调用回调
/// </summary>
public Action<object> callback;
/// <summary>
/// 调用参数
/// </summary>
public object arg;
}
}
}