public static bool cliAddEventWaiter(PlTerm blockOn, PlTerm clazzOrInstance, PlTerm memberSpec, PlTerm newBlockOn) { WaitUntilDelegateList list = null; object getInstance1 = GetInstance(blockOn); var wud = getInstance1 as WaitUntilDelegate; if (wud == null) { if (!(getInstance1 is WaitUntilDelegateList)) return Embedded.Error("Not an instance of WaitUntilDelegate: " + blockOn); list = getInstance1 as WaitUntilDelegateList; } else { list = wud.parent; } object getInstance; Type c; if (!GetInstanceAndType(clazzOrInstance, out getInstance, out c)) return false; Type[] paramz = null; if (!CheckBound(memberSpec, blockOn)) return false; EventInfo fi = findEventInfo(memberSpec, c, ref paramz, BindingFlagsALL); if (fi == null) { return Embedded.Error("Cant find event {0} on {1}", memberSpec, (object)c ?? clazzOrInstance); } var wud2 = new WaitUntilDelegate(list, fi, getInstance); list.WaitOns.Add(wud2); return newBlockOn.FromObject(list); }
public object[] WaitOne(TimeSpan ts, out WaitUntilDelegate wud0) { wud0 = null; if (!mre.WaitOne(ts)) { return(null); } foreach (WaitUntilDelegate wud in WaitOns) { var tr = wud.Result; if (tr != null) { wud0 = wud; return(tr); } } return(null); }
public static bool cliAddEventWaiter(PlTerm blockOn, PlTerm clazzOrInstance, PlTerm memberSpec, PlTerm newBlockOn) { WaitUntilDelegateList list = null; object getInstance1 = GetInstance(blockOn); var wud = getInstance1 as WaitUntilDelegate; if (wud == null) { if (!(getInstance1 is WaitUntilDelegateList)) { return(Error("Not an instance of WaitUntilDelegate: " + blockOn)); } list = getInstance1 as WaitUntilDelegateList; } else { list = wud.parent; } object getInstance; Type c; if (!GetInstanceAndType(clazzOrInstance, out getInstance, out c)) { return(false); } Type[] paramz = null; if (!CheckBound(memberSpec, blockOn)) { return(false); } EventInfo fi = findEventInfo(memberSpec, c, ref paramz, BindingFlagsALL); if (fi == null) { return(Error("Cant find event {0} on {1}", memberSpec, (object)c ?? clazzOrInstance)); } var wud2 = new WaitUntilDelegate(list, fi, getInstance); list.WaitOns.Add(wud2); return(newBlockOn.FromObject(list)); }
public object[] WaitOne(TimeSpan ts, out WaitUntilDelegate wud0) { wud0 = null; if (!mre.WaitOne(ts)) return null; foreach (WaitUntilDelegate wud in WaitOns) { var tr = wud.Result; if (tr != null) { wud0 = wud; return tr; } } return null; }