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; } })); }
/// <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; })); }
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); }
/// <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); }
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) { } }
/// <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(); }