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下使用的,直接把代碼摳出來的,直接拷貝是編譯不經過的。spa
只是寫在這裏當初一個記事本,避免忘記。code