示例#1
0
 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
 }
示例#2
0
 /// <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();
     }
 }
示例#3
0
 public void Remove()
 {
     Trays.RemoveAt(0);
     OnComplate?.Invoke();
 }