Unity 中 Socket 非主线程执行

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/**
 * 解决不能在非主线程执行问题
 */
/// 
/// 用之前需要把它挂在场景中某个物体上
/// 使用方法:
/// 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"); });
/// 
public class Invoker : MonoBehaviour
{
    static Invoker _instance;

    public static void InvokeInMainThread(System.Action _delegate)
    {
        _instance.delegates.Add(_delegate);
    }

    public List delegates = new List();

    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"); });

你可能感兴趣的:(Unity 中 Socket 非主线程执行)