C# 實現函數回調

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

相關文章
相關標籤/搜索