美文网首页
Unity 中 Socket 非主线程执行

Unity 中 Socket 非主线程执行

作者: 卓灬不凡 | 来源:发表于2019-10-09 17:11 被阅读0次

代码如下:

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

相关文章

  • Unity 中 Socket 非主线程执行

    代码如下: 使用方法: 用之前需要把它挂在场景中某个物体上 之后这样使用 //lambda表达式Invoker.I...

  • Unity Socket网络编程 服务端与客户端

    Unity Socket网络编程坑挺多的,服务端在VS能好好运行的代码,在unity中得开启线程去执行,要不然会在...

  • [Unity 3d] 老瓶新酒,看我基于PlayerLoopSy

    Loom :在 Unity 多线程编程中实现线程间的数据同步,避免非主线程直接操作 Unity 对象。在本文,笔者...

  • GCD延时

    在主线程中延迟执行某动作,不会卡主主线程,不影响后面的东做执行 在子线程中执行某动作,不会卡主整个线程

  • GCD线程延时

    //swift中的线程延时 //在主线程中延迟执行某动作,不会卡主主线程,不影响后面的东做执行 //在子线程中执行...

  • 实现延迟的几种方法

    1.在主线程中延迟执行某动作,不会卡主主线程,不影响后面的东做执行 2.在子线程中执行某动作,不会卡主整个线程 3...

  • Swift之延迟函数

    1.perform(必须在主线程中执行) 2.timer(必须在主线程中执行) 3.Thread (在主线程会卡主...

  • 非主线程更新UI:Handler.post*方法

    学习心得 post*方法中的Runnable参数中的run代码会在主线程中执行 总结非主线程更新UI的4非方法:H...

  • 异步任务 AsyncTask

    为什么要异步任务 android单线程模型。 耗时操作放在非主线程中执行。 AsyncTask为何而生 子线程中更...

  • 几种延时方法【转】

    // 在主线程中延迟执行某动作,不会卡主主线程,不影响后面的东做执行 dispatch_after(dispatc...

网友评论

      本文标题:Unity 中 Socket 非主线程执行

      本文链接:https://www.haomeiwen.com/subject/cqbgpctx.html