private void TaskFinished(bool manual) { // ISSUE: reference to a compiler-generated field Task.FinishedHandler finished = this.Finished; if (finished == null) { return; } finished(this, manual); }
static int set_Finished(IntPtr L) { try { Task obj = (Task)ToLua.CheckObject(L, 1, typeof(Task)); EventObject arg0 = null; if (LuaDLL.lua_isuserdata(L, 2) != 0) { arg0 = (EventObject)ToLua.ToObject(L, 2); } else { return(LuaDLL.luaL_throw(L, "The event 'Task.Finished' can only appear on the left hand side of += or -= when used outside of the type 'Task'")); } if (arg0.op == EventOp.Add) { Task.FinishedHandler ev = (Task.FinishedHandler)DelegateFactory.CreateDelegate(typeof(Task.FinishedHandler), arg0.func); obj.Finished += ev; } else if (arg0.op == EventOp.Sub) { Task.FinishedHandler ev = (Task.FinishedHandler)LuaMisc.GetEventHandler(obj, typeof(Task), "Finished"); Delegate[] ds = ev.GetInvocationList(); LuaState state = LuaState.Get(L); for (int i = 0; i < ds.Length; i++) { ev = (Task.FinishedHandler)ds[i]; LuaDelegate ld = ev.Target as LuaDelegate; if (ld != null && ld.func == arg0.func) { obj.Finished -= ev; state.DelayDispose(ld.func); break; } } arg0.func.Dispose(); } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }