Exemplo n.º 1
0
 private void button1_Click(object sender, EventArgs e)
 {
     try
     {
         FuncTimeout.EventNeedRun action = delegate(object[] param)
         {
             //调用自定义函数
             return(Fun());
         };
         FuncTimeout ft     = new FuncTimeout(action, 2000);
         var         result = ft.doAction("1", "2", DateTime.Now);
         if (result != null)
         {
             MessageBox.Show("normal end");
         }
         else
         {
             MessageBox.Show("bad end");
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Exemplo n.º 2
0
 private void StopAuto()
 {
     if (_getSerialNumberTick != null)
     {
         _getSerialNumberTick.Stop();
         _getSerialNumberTick = null;
     }
 }
Exemplo n.º 3
0
        private void MifareInOrLeave(byte b1, byte b2)
        {
            var slot        = b1 & 0xF0;
            var mediaStatus = b1 & 0x0F;

            if (mediaStatus == 1)
            {
                Log("进入, 读取序列号...");
                _getSerialNumberTick = new FuncTimeout();
                _getSerialNumberTick.StartLoop(500, () =>
                {
                    var sendData = MifarePackage.GetSendData("00 00");
                    CMD          = 1;
                    Write(sendData);
                });
            }
            else
            {
                Log("离开");
                StopAuto();
            }

            ShowICType(b2);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 按关键词导入,每个关键词只能查询100条
        /// </summary>
        public static void ImportAllTaobaoke()
        {
            var      dt   = DateTime.Now;
            PageInfo page = new PageInfo();

            page.PageSize = 100;
            var cateItems = ItemCateBLL.GetData();

            foreach (var item in cateItems)
            {
                if (item.LastUpdateTime > dt.AddDays(-10))
                {
                    continue;
                }

                Func <string, object> fun = (keyword) =>
                {
                    try
                    {
                        List <Items> updateItems = new List <Items>(200);
                        List <Items> addItems    = new List <Items>(200);
                        var          items       = ItemsBLL.GetByTag(keyword);
                        page.PageIndex = 1;
                        var result = QueryCoupon(item.CateName);

                        //Timeout timeout = new Timeout();
                        //timeout.Do = QueryCoupon(item.CateName);

                        if (result == null || result.Count() == 0)
                        {
                            return(null);
                        }
                        foreach (var item2 in result)
                        {
                            var temp = items.FirstOrDefault(a => a.NumIid == item2.NumIid);
                            if (temp != null)
                            {
                                item2.Id = temp.Id;
                                temp     = item2;
                                if (updateItems.Exists(d => d.NumIid == temp.NumIid))
                                {
                                    updateItems.Add(temp);
                                }
                            }
                            else
                            {
                                items.Add(item2);
                                addItems.Add(item2);
                            }
                        }

                        item.LastUpdateTime = dt;
                        Task.Factory.StartNew(() => {
                            if (addItems.Count > 0)
                            {
                                ItemsBLL.BatchInsert(addItems);
                            }
                            if (updateItems.Count > 0)
                            {
                                ItemsBLL.BatchUpdate(updateItems);
                            }
                            ItemCateBLL.Update(item);
                        });
                    }
                    catch (Exception ex)
                    {
                        Logger.WriteErrorLog(ex.Message);
                    }
                    return(null);
                };
                FuncTimeout.EventNeedRun action = delegate(object[] param)
                {
                    //调用自定义函数
                    return(fun(param[0].ToString()));
                };
                FuncTimeout ft = new FuncTimeout(action, 1000 * 60 * 2);//超时时间2分钟
                ft.doAction(item.CateName);
                Thread.Sleep(5000);
            }
            try
            {
                //ItemCateBLL.BatchUpdate(cateItems);

                ItemsBLL.ClearSameData();

                Console.WriteLine("Done:" + DateTime.Now);
            }
            catch (Exception ex)
            {
                Logger.WriteErrorLog(ex.Message);
            }

            //TaskParallelHelper.ExecuteTask(actionItem);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 没有关键词,导入前一万条
        /// </summary>
        public static void ImportTaobaoke()
        {
            var dt = DateTime.Now;
            Func <int, object> fun = (pageIndex) =>
            {
                try
                {
                    List <Items> updateItems = new List <Items>(200);
                    List <Items> addItems    = new List <Items>(200);
                    var          items       = ItemsBLL.GetData();

                    var result = QueryCoupon(string.Empty, pageIndex);

                    if (result == null || result.Count() == 0)
                    {
                        return(null);
                    }
                    foreach (var item2 in result)
                    {
                        var temp = items.FirstOrDefault(a => a.NumIid == item2.NumIid);
                        if (temp != null)
                        {
                            item2.Id = temp.Id;
                            temp     = item2;
                            if (updateItems.Exists(d => d.NumIid == temp.NumIid))
                            {
                                updateItems.Add(temp);
                            }
                        }
                        else
                        {
                            items.Add(item2);
                            addItems.Add(item2);
                        }
                    }

                    Task.Factory.StartNew(() => {
                        if (addItems.Count > 0)
                        {
                            ItemsBLL.BatchInsert(addItems);
                        }
                        if (updateItems.Count > 0)
                        {
                            ItemsBLL.BatchUpdate(updateItems);
                        }
                    });
                }
                catch (Exception ex)
                {
                    Logger.WriteErrorLog(ex.Message);
                }
                return(null);
            };

            for (int i = 1; i <= 100; i++)
            {
                FuncTimeout.EventNeedRun action = delegate(object[] param)
                {
                    //调用自定义函数
                    return(fun(param[0].ToString().TryToInt()));
                };
                FuncTimeout ft = new FuncTimeout(action, 1000 * 60 * 1);//超时时间2分钟
                ft.doAction(i);
                Thread.Sleep(5000);
            }
            try
            {
                ItemsBLL.ClearSameData();

                Console.WriteLine("Done:" + DateTime.Now);
            }
            catch (Exception ex)
            {
                Logger.WriteErrorLog(ex.Message);
            }
        }
Exemplo n.º 6
0
        public void Start()
        {
            // 同步配置信息
            LoadConfig();

            // 同步 jz 表中有几种 OPCServer
            string[] dbServerNames = LoadPumpJZOPCServerNames();
            if (dbServerNames == null || dbServerNames.Length == 0)
            {
                TraceManagerForOPC.AppendErrMsg("机组表中没有读取模式为 OPC 的机组, 无法启动 OPC 服务");
                Stop();
                return;
            }

            string[] serverNames = OpcDaClient.GetLocalServer();
            if (serverNames == null || serverNames.Length == 0)
            {
                TraceManagerForOPC.AppendErrMsg("本地计算机没有安装 OPCServer, 无法启动 OPC 服务");
                Stop();
                return;
            }
            opcCaches = new ConcurrentDictionary <string, OpcDaClient>();

            // 创建 OPC 客户端对象
            foreach (string dbServerName in dbServerNames)
            {
                if (string.IsNullOrWhiteSpace(dbServerName) || dbServerName.Length < 6)
                {
                    TraceManagerForOPC.AppendErrMsg("数据库中 OPC 服务器名非法, 无法启动 OPC 客户端");
                    Stop();
                    return;
                }
                string dbServerNameHead = dbServerName.Trim().ToLower().Substring(0, 5);
                if (serverNames.Where(str => str.Contains(dbServerNameHead)).ToArray().Length == 0)
                {
                    TraceManagerForOPC.AppendErrMsg("本地没有安装 " + dbServerName + " 服务器, 无法启动 OPC 客户端");
                    Stop();
                    return;
                }

                OpcDaClient opc = new OpcDaClient(serverNames.Where(str => str.Contains(dbServerNameHead)).ToArray()[0], UpdateRate, null, DefaultGroupDeadband);
                opcCaches.TryAdd(dbServerName, opc);
            }
            // OPC 客户端连接服务器
            foreach (string key in opcCaches.Keys)
            {
                OpcDaClient opc = opcCaches[key];
                if (opc != null)
                {
                    FuncTimeout <OpcDaClient, bool> timeout = new FuncTimeout <OpcDaClient, bool>();
                    timeout.Do = StartOPCClient;

                    bool isTimeout = timeout.DoWithTimeout(opc, new TimeSpan(0, 0, 0, 15), out bool reslut);    // 只等待 15 秒
                    if (isTimeout)
                    {
                        // 超时
                        if (key == "KingView.View.1")
                        {
                            TraceManagerForOPC.AppendErrMsg("连接 " + opc.ProgID + " OPC服务器超时 " + ", 可能原因为未配置其 DCOM 权限");
                        }
                        else
                        {
                            TraceManagerForOPC.AppendErrMsg("连接 " + opc.ProgID + " OPC服务器超时");
                        }
                        Stop();
                        return;
                    }

                    if (reslut)
                    {
                        TraceManagerForOPC.AppendDebug("已连接 " + opc.ProgID + " OPC 服务器");
                    }
                    else
                    {
                        if (key == "KingView.View.1")
                        {
                            TraceManagerForOPC.AppendErrMsg("连接 " + opc.ProgID + " OPC 服务器失败" + ", 可能原因为组态王未运行");
                        }
                        else
                        {
                            TraceManagerForOPC.AppendErrMsg("连接 " + opc.ProgID + " OPC 服务器失败");
                        }
                        Stop();
                        return;
                    }
                }
            }
            IsRuning = true;
        }