void Trigger(bool now, int line) { if (now != NowState[line]) { NowState[line] = now; LastStateDate[line] = DateTime.Now; } if (NowState[line] == LastState[line]) { return; } #region 滤波 var delay = (DateTime.Now - LastStateDate[line]).Value.TotalMilliseconds; if ((NowState[line] && delay > Config.IOCard.Line[line].OnDelay) || (!NowState[line] && delay > Config.IOCard.Line[line].OffDelay)) { LastState[line] = NowState[line]; if (now) { Task.Run(() => { OnTrigger?.Invoke(line); }); } else { Task.Run(() => { OnComplate?.Invoke(line); }); } } #endregion }
/// <summary> /// /// </summary> private static void DownloadImage() { while (true) { ImageQueueInfo t = null; lock (Stacks) { if (Stacks.Count > 0) { t = Stacks.Dequeue(); } } if (t != null) { Uri uri = new Uri(t.url); BitmapImage image = null; try { if ("http".Equals(uri.Scheme, StringComparison.CurrentCultureIgnoreCase)) { //如果是HTTP下载文件 using (WebClient wc = new WebClient()) { using (var ms = new MemoryStream(wc.DownloadData(uri))) { image = new BitmapImage(); image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.StreamSource = ms; image.EndInit(); } } } else if ("file".Equals(uri.Scheme, StringComparison.CurrentCultureIgnoreCase)) { if (!File.Exists(t.url)) { continue; } using (var fs = new FileStream(t.url, FileMode.Open)) { image = new BitmapImage(); image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.StreamSource = fs; image.EndInit(); } } if (image != null) { if (image.CanFreeze) { image.Freeze(); } t.image.Dispatcher.BeginInvoke(new Action <ImageQueueInfo, BitmapImage>((i, bmp) => { OnComplate?.Invoke(i.image, i.url, bmp); }), new object[] { t, image }); } } catch (Exception e) { MessageBox.Show(e.Message); continue; } } if (Stacks.Count > 0) { continue; } autoEvent.WaitOne(); } }
public void Remove() { Trays.RemoveAt(0); OnComplate?.Invoke(); }