C#実現関数コールバック

4970 ワード

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で使用されるため,コードを直接ほじくり,直接コピーはコンパイルに通らない.
ここに最初の手帳を書いて、忘れないようにします.