//自动入库
        private void 自动入库ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Timers.Timer t = new System.Timers.Timer(5000);   //实例化Timer类,设置间隔时间为5毫秒;   
            t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到达时间的时候执行事件;   
            t.AutoReset = false;   //设置是执行一次(false)还是一直执行(true);   
            t.Enabled = true;     //是否执行System.Timers.Timer.Elapsed事件;         }
        public void theout(object source, System.Timers.ElapsedEventArgs e)
        {       
            //扫描标签,获取标签号
            sm.Inquiry();
            //标签号
            string str = sm.FInventory_EPC_List;       
            if (str!=""&&str!=null)
            {
                //查询数据库是否存在该标签
                List<MaterialInfo> materialInfoList = new List<MaterialInfo>();
                using (SqlConnection conn = new SqlConnection(conStr))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "select * from tb_material where materialId = " + str;
                        using (SqlDataReader r = cmd.ExecuteReader())
                        {
                            if (r.Read())
                            {
                                
                            }
                            else
                            {
                                sm.Show();//为什么展示这个form,鼠标一直打转,界面未展示完全,一会儿就崩了???                            }
                            r.Close();
                        }
                    }
                }
            }
            
        }  

解决方案 »

  1.   

    1. sm显示的过程中还做什么操作了?2.timer存在重入问题
    如果sm显示超过了interval,就会重复执行,
    如果timer中的函数是不可重入,那么出问题不可避免3.把数据处理和数据显示分离开比较合理
      

  2.   

    我测试了下,在timer事件里展示form就会卡死,砸办???
      

  3.   

    System.Timers.Timer.Elapsed事件里不能调用form的show()方法吗?
      

  4.   

    你这个应该是多线程导致阻塞了,你可以尝试用异步来解决阻塞,或者开一个线程让timer执行这个线程,线程执行这个方法,Thread thread = new Thread(new ThreadStart(这里面是个委托)); 
      

  5.   

    sm是我需要跳转form的对象啊