Пример #1
0
 void IDisposable.Dispose()
 {
     if (IsRunning)
     {
         Stop(); _executeTask.Wait();
     }
     if (Browser != null)
     {
         Browser.LoadingStateChanged -= Browser_LoadingStateChanged;
         Browser.FrameLoadStart      -= Browser_FrameLoadStart;
         Browser.FrameLoadEnd        -= Browser_FrameLoadEnd;
         Browser = null;
     }
     if (_executeTask != null)
     {
         _executeTask.Dispose(); _executeTask = null;
     }
     if (_breakEvent != null)
     {
         _continueEvent.Dispose(); _continueEvent = null;
     }
     if (_continueEvent != null)
     {
         _continueEvent.Dispose(); _continueEvent = null;
     }
     if (_frameLoadEvent != null)
     {
         _frameLoadEvent.Dispose(); _frameLoadEvent = null;
     }
     if (_pageLoadEvent != null)
     {
         _pageLoadEvent.Dispose(); _pageLoadEvent = null;
     }
 }
        /// <summary>
        /// 转换成Task异步,并且把压缩数据反序列化成指定的类型
        /// </summary>
        /// <typeparam name="T">要反序列化的类型</typeparam>
        /// <param name="q"></param>
        /// <returns></returns>
        public static Task <T> ResultAsync <T>(this InvokeOperation <byte[]> q) where T : class
        {
            return(Task.Run(() =>
            {
                try
                {
                    System.Threading.AutoResetEvent auto = new System.Threading.AutoResetEvent(false);
                    q.Completed += (a, b) => auto.Set();
                    auto.WaitOne();
                    auto.Dispose();
                    byte[] result = Decompress(q.Value);
                    if (result != null && result.Length > 0)
                    {
#if (DEBUG)
                        string xml = System.Text.Encoding.UTF8.GetString(result);
#endif
                        using (MemoryStream stream = new MemoryStream())
                        {
                            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                            stream.Write(result, 0, result.Length);
                            stream.Position = 0;// (0L);
                            return (serializer.ReadObject(stream) as T);
                        }
                    }
                    else
                    {
                        return null;
                    }
                }
                catch (Exception e)
                {
                    return null;
                }
            }));
        }
        /// <summary>
        /// 转换成Task异步
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="q"></param>
        /// <returns></returns>
        public static Task <IEnumerable <TEntity> > ResultAsync <TEntity>(this LoadOperation <TEntity> q) where TEntity : Entity
        {
            return(Task.Run(() =>
            {
                try
                {
                    System.Threading.AutoResetEvent auto = new System.Threading.AutoResetEvent(false);
                    q.Completed += (a, b) =>
                    {
                        auto.Set();
                    };

                    auto.WaitOne();
                    auto.Dispose();
                    if (null != q.Error)
                    {
                        return null;
                    }
                    return q.Entities;
                }
                catch (Exception e)
                {
                    return null;
                }
            }));
        }
Пример #4
0
 /// <summary>
 /// 转换成Task异步
 /// </summary>
 /// <typeparam name="U">返回类型</typeparam>
 /// <param name="q"></param>
 /// <returns></returns>
 public static Task <U> ResultAsync <U>(this InvokeOperation <U> q)
 {
     return(Task.Run(() =>
     {
         System.Threading.AutoResetEvent auto = new System.Threading.AutoResetEvent(false);
         q.Completed += (a, b) => auto.Set();
         auto.WaitOne();
         auto.Dispose();
         return q.Value;
     }));
 }
Пример #5
0
            public void Dispose()
            {
                if (1 == Interlocked.Exchange(ref _Disposed, 1))
                {
                    return;
                }

                try
                {
                    if (_started)
                    {
                        _running = false;
                        _haveWork.Set();
                        if (!_finished.WaitOne(100))
                        {
                            _thread.Abort();
                            _finished.WaitOne();
                        }
                    }

                    if (null != _startedSignal)
                    {
                        _startedSignal.Dispose();
                    }

                    if (null != _finished)
                    {
                        _finished.Dispose();
                    }

                    if (null != _haveWork)
                    {
                        _haveWork.Dispose();
                    }

                    _startedSignal = null;
                    _finished      = null;
                    _haveWork      = null;
                    _thread        = null;
                    _work          = null;
                }
                catch (Exception)
                {
                }

                GC.SuppressFinalize(this);
            }
Пример #6
0
        /// <summary>
        /// 等待数据载入,提供一个同步方法的扩展
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="q"></param>
        /// <returns></returns>
        public static IEnumerable <TEntity> waitLoaded <TEntity>(this LoadOperation <TEntity> q) where TEntity : Entity
        {
            System.Threading.AutoResetEvent auto = new System.Threading.AutoResetEvent(false);
            q.Completed += (a, b) =>
            {
                auto.Set();
            };

            auto.WaitOne();

            auto.Dispose();
            if (null != q.Error)
            {
                throw q.Error;
            }
            return(q.Entities);
        }
Пример #7
0
        public void Close()
        {
            try
            {
                sock.Shutdown(SocketShutdown.Both);

#if !COREFX
                sock.Disconnect(false);
                sock.Close();
                wait.Close();
#endif
                sock.Dispose();
                wait.Dispose();
            }
            catch (ObjectDisposedException)
            {
            }
            catch (NullReferenceException)
            {
            }
        }
Пример #8
0
        /// <summary>
        /// 同步反序列化成指定的类型
        /// </summary>
        /// <typeparam name="T">要反序列化的类型</typeparam>
        /// <param name="q"></param>
        /// <returns></returns>
        public static T waitInvoke <T>(this InvokeOperation <byte[]> q) where T : class
        {
            System.Threading.AutoResetEvent auto = new System.Threading.AutoResetEvent(false);
            q.Completed += (a, b) => auto.Set();
            auto.WaitOne();
            auto.Dispose();
            byte[] result = Decompress(q.Value);
#if (DEBUG)
            string xml = System.Text.Encoding.UTF8.GetString(result);
            //System.IO.File.WriteAllBytes("bigfile.txt", result);
            //var s = xml.Substring(0, 100);
            //Debug.WriteLine(s);
#endif
            using (MemoryStream stream = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                stream.Write(result, 0, result.Length);
                stream.Position = 0;// (0L);
                return(serializer.ReadObject(stream) as T);
            }
        }
 public void Dispose()
 {
     m_Wait.Dispose();
 }