Пример #1
0
 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);
     }
 }
Пример #2
0
        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);
            }
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
 private void CheckNewThread_OnCompleted(CompletedArgs args)
 {
     if (this.IsHandleCreated)
     {
         var meth = new CompletedHandler(CheckNewThread_OnCompleted_UI);
         this.BeginInvoke(meth, new object[] { args });
     }
 }
Пример #5
0
        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;
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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;
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        /// <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);
            }
        }
Пример #10
0
        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;
            }
        }
Пример #11
0
        /// <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;
            }
        }
Пример #12
0
 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);
     }
 }
Пример #13
0
 protected virtual void OnComplete()
 {
     CompletedHandler?.Invoke(this);
 }
 public CorutineCompletedBinder(Control context, CompletedHandler handle)
     : base(context)
 {
     handler = handle;
 }
Пример #15
0
 /// <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);
 }
Пример #16
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);
 }