private static void RaiseCompleted(IntPtr cPtr, IntPtr sender, IntPtr e) { try { if (!_Completed.ContainsKey(cPtr)) { throw new InvalidOperationException("Delegate not registered for Completed event"); } if (sender == IntPtr.Zero && e == IntPtr.Zero) { _Completed.Remove(cPtr); return; } if (Noesis.Extend.Initialized) { CompletedHandler handler = _Completed[cPtr]; if (handler != null) { handler(Noesis.Extend.GetProxy(sender, false), new EventArgs(e, false)); } } } catch (Exception exception) { Noesis.Error.UnhandledException(exception); } }
public void Start(CompletedHandler completedHandler = null, ErrorHandler errorHandler = null) { AsyncTask rootTask = this; while (rootTask.parent != null) { rootTask = rootTask.parent; } if (rootTask == this) { rootTask.ExecuteTask(null, completedHandler, errorHandler); } else { if (completedHandler != null) { this.onCompleted += completedHandler; } if (errorHandler != null) { this.onError += errorHandler; } rootTask.ExecuteTask(null, null, null); } }
/// <summary> /// 启动 Coroutine Task /// </summary> /// <param name="onCompleted"></param> /// <param name="onError"></param> public void Start(CompletedHandler onCompleted = null, ErrorHandler onError = null) { var rootTask = this; while (rootTask._parentTask != null) { //循环,找到第一个 Task rootTask = rootTask._parentTask; } if (rootTask == this) { rootTask.ExecuteTask(null, onCompleted, onError); } else { //注意 this,代表离 Start 方法最近的 Task 实例 if (onCompleted != null) { this._onCompleted += onCompleted; } if (onError != null) { this._onError += onError; } rootTask.ExecuteTask(null, null, null); } }
private void CheckNewThread_OnCompleted(CompletedArgs args) { if (this.IsHandleCreated) { var meth = new CompletedHandler(CheckNewThread_OnCompleted_UI); this.BeginInvoke(meth, new object[] { args }); } }
public Downloader(string url, string path, ProgressHandler onProgress = null, CompletedHandler onComplete = null) { m_onProgress = onProgress; m_onCompleted = onComplete; m_strUrl = url; m_strPath = path; IsFinish = false; }
private static void RaiseCompleted(IntPtr cPtr, IntPtr sender, IntPtr e) { try { if (Noesis.Extend.Initialized) { if (sender == IntPtr.Zero && e == IntPtr.Zero) { _Completed.Remove(cPtr); return; } CompletedHandler handler = null; if (!_Completed.TryGetValue(cPtr, out handler)) { throw new InvalidOperationException("Delegate not registered for Completed event"); } if (handler == null) { return; } var args = Marshal.PtrToStructure <TimelineEventArgs>(e); foreach (var @delegate in handler.GetInvocationList()) { var storyboardTarget = (FrameworkElement)args.Target; if (storyboardTarget.Tag is FrameworkElement) { // special hack found! @delegate.DynamicInvoke(Noesis.Extend.GetProxy(sender, false), new System.EventArgs()); return; } var delegateTarget = @delegate.Target; while (storyboardTarget != null) { if (ReferenceEquals(storyboardTarget, delegateTarget)) { @delegate.DynamicInvoke(Noesis.Extend.GetProxy(sender, false), new System.EventArgs()); break; } storyboardTarget = VisualTreeHelper.GetParent(storyboardTarget) as FrameworkElement; } } } } catch (Exception exception) { Noesis.Error.UnhandledException(exception); } }
public DownloaderHandler(string path, ProgressHandler onProgress, CompletedHandler onCompleted) : base(new byte[1024 * 200]) { m_onCompleted = onCompleted; m_onProgress = onProgress; m_path = path.Replace('\\', '/'); // 临时缓存文件,结尾添加.temp扩展名 m_pathTemp = m_path + ".temp"; m_stream = new FileStream(m_pathTemp, FileMode.OpenOrCreate); m_downedLength = (int)m_stream.Length; m_stream.Position = m_downedLength; }
private void ExecuteTask(AsyncTask prevResult = null, CompletedHandler completedHandler = null, ErrorHandler errorHandler = null) { if (completedHandler != null) { onCompleted += completedHandler; } if (errorHandler != null) { onError += errorHandler; } try { onAction(prevResult, Completed, Error); } catch (Exception e) { Error(e); } }
/// <summary> /// 执行任务 /// </summary> /// <param name="previousTask"></param> /// <param name="onCompleted"></param> /// <param name="onError"></param> private void ExecuteTask(CoroutineTask previousTask = null, CompletedHandler onCompleted = null, ErrorHandler onError = null) { if (onCompleted != null) { _onCompleted += onCompleted; } if (onError != null) { _onError += onError; } try { //调用委托指向的方法 _onOnAction(previousTask, Completed, Error); } catch (Exception e) { Error(e); } }
public override void Dispose() { m_onProgress = null; m_onCompleted = null; if (m_request != null) { if (!m_request.isDone) { m_request.Abort(); } m_request.Dispose(); m_request = null; } if (m_downloadHandler != null) { m_downloadHandler.Close(); m_downloadHandler = null; } }
/// <summary> /// 显示对话框 /// </summary> /// <param name="title">标题</param> /// <param name="msg">消息</param> /// <param name="workMethod">执行方法,不能在此方法内改面Form控件值</param> /// <param name="completedMethod">完成方法,可以改变Form控件值</param> /// <param name="enalbeCancel">是否允许停止</param> /// <param name="autoClose">是否自动关闭</param> /// <param name="time">停留多长时间</param> public void AsyncShow(string title, string msg, AsyncRunHandler workMethod, CompletedHandler completedMethod, bool autoClose, float time) { try { if (Instance.actived) { return; } Instance.actived = true; work = null; completed = null; Instance.btnOK.Visible = false; instance.timerProgress = 2; Instance.timer.Enabled = true; Instance.timer.Interval = 200; //Instance.pgBar2.Visible = true; Instance.pgBar.Visible = true; Instance.pgBar.Text = string.Format("2% (0秒)"); Application.DoEvents(); Instance.lblContent.Text = cruMessage = msg; Instance.totalSencond = 1; instance.totalCount = 0; Instance.dialog = false; Instance.closeTime = time; Instance.isRunning = true; Instance.Text = title; Instance.autoClose = autoClose; Application.DoEvents(); work = workMethod; completed = completedMethod; Instance.ShowDialog(); } catch (Exception ex) { throw; } }
private static void RaiseCompleted(IntPtr cPtr, IntPtr sender, IntPtr e) { try { if (Noesis.Extend.Initialized) { long ptr = cPtr.ToInt64(); if (sender == IntPtr.Zero && e == IntPtr.Zero) { _Completed.Remove(ptr); return; } CompletedHandler handler = null; if (!_Completed.TryGetValue(ptr, out handler)) { throw new InvalidOperationException("Delegate not registered for Completed event"); } handler?.Invoke(Noesis.Extend.GetProxy(sender, false), new EventArgs(e, false)); } } catch (Exception exception) { Noesis.Error.UnhandledException(exception); } }
protected virtual void OnComplete() { CompletedHandler?.Invoke(this); }
public CorutineCompletedBinder(Control context, CompletedHandler handle) : base(context) { handler = handle; }
/// <summary> /// 显示对话框 /// </summary> /// <param name="title">标题</param> /// <param name="msg">消息</param> /// <param name="workMethod">执行方法,不能在此方法内改面Form控件值</param> /// <param name="completedMethod">完成方法,可以改变Form控件值</param> /// <param name="enalbeCancel">是否允许停止</param> /// <param name="autoClose">是否自动关闭</param> public void AsyncShow(string title, string msg, AsyncRunHandler workMethod, CompletedHandler completedMethod, bool autoClose) { AsyncShow(title, msg, workMethod, completedMethod, autoClose, 0); }
/// <summary> /// 显示对话框 /// </summary> /// <param name="title">标题</param> /// <param name="msg">消息</param> /// <param name="workMethod">执行方法,不能在此方法内改面Form控件值</param> /// <param name="completedMethod">完成方法,可以改变Form控件值</param> public void AsyncShow(string title, string msg, AsyncRunHandler workMethod, CompletedHandler completedMethod) { AsyncShow(title, msg, workMethod, completedMethod, true); }