Unity 中 Socket 非主線程執(zhí)行

代碼如下:

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

/**
 * 解決不能在非主線程執(zhí)行問題
 */
/// <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"); });

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容