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下使用的,直接把代碼摳出來的,直接拷貝是編譯不通過的。

只是寫在這里當初一個記事本,避免忘記。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM