代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* 解决不能在非主线程执行问题
*/
/// <summary>
/// 用之前需要把它挂在场景中某个物体上
/// 使用方法:
/// 1.lambda表达式:
/// Invoker.InvokeInMainThread([lambda表达式]);
/// 示例:
/// Invoker.InvokeInMainThread(()=>{Console.WriteLine("hello");});
/// 2.方法
/// Invoker.InvokeInMainThread([方法名]);
/// 示例:
/// public void cakkback(){Console.WriteLine("hello");}
/// Invoker.InvokeInMainThread(callback);
/// 3.delegate
/// Invoker.InvokeInMainThread([delegate]);
/// 示例:
/// Invoker.InvokeInMainThread( delegate{ Console.WriteLine("hello"); });
/// </summary>
public class Invoker : MonoBehaviour
{
static Invoker _instance;
public static void InvokeInMainThread(System.Action _delegate)
{
_instance.delegates.Add(_delegate);
}
public List<System.Action> delegates = new List<System.Action>();
private void Awake()
{
_instance = this;
}
void Update()
{
Execute();
}
void Execute()
{
if (delegates.Count == 0)
return;
for (int i = 0; i < delegates.Count; i++)
delegates[i]();
delegates.Clear();
}
}
使用方法:
- 用之前需要把它挂在场景中某个物体上
- 之后这样使用
//lambda表达式
Invoker.InvokeInMainThread([lambda表达式]);
//示例
Invoker.InvokeInMainThread(()=>{Console.WriteLine("hello");});
//方法
Invoker.InvokeInMainThread([方法名]);
//示例
public void cakkback(){Console.WriteLine("hello");}
Invoker.InvokeInMainThread(callback);
//delegate
Invoker.InvokeInMainThread([delegate]);
//示例
Invoker.InvokeInMainThread( delegate{ Console.WriteLine("hello"); });
网友评论