public class Lib { public delegate void UserFunctionCB(); private static UserFunctionCB m_userFnCB; /// <summary> /// 初始化时把需要回调的函数传入 /// </summary> /// <param name="func"></param> public static void InitCallbackFunction(UserFunctionCB func) { m_userFnCB = func; } /// <summary> /// 当程序出现异常时会自动触发此函数 /// (在这里我就不过多的描述异常捕获的过程了) /// </summary> /// <param name="func"></param> public static void HandleExceptionForNDK() { // 出现异常时调用用户自定义函数 CallUserFunction(); } /// <summary> /// 回调执行用户设置的函数 /// </summary> private static void CallUserFunction() { if (m_userFnCB != null) { IAsyncResult result = m_userFnCB.BeginInvoke(delegate(IAsyncResult ar) { m_userFnCB.EndInvoke(ar); }, null); // 执行50毫秒后超时 result.AsyncWaitHandle.WaitOne(50, true); } } }
以下是调用部份:
public class Demo { void Start() { var m_callbackFn = new Lib.UserFunctionCB(CallBackFunction); Lib.InitCallbackFunction(m_callbackFn); } /// <summary> /// 回调函数实现部份 /// </summary> private void CallBackFunction() { Debug.LogError("print of call back function!"); } }
以上就是通过委托的方式实现回调操作!由于这个例子是在Unity下使用的,直接把代码抠出来的,直接拷贝是编译不通过的。
只是写在这里当初一个记事本,避免忘记。