没有任何提示,就自动结束任务了..try
catch
 也不行.应用程序中使用了ThreadPool  这是什么原因

解决方案 »

  1.   

    没有转到你设计的正常form去,加个变量判断一下就行了
      

  2.   

    没有,我猜,可是ThreadPool中线程,死锁的原因
    有个N个任务,要处理.  只有当只其中一个任务处理完成时,等待一定时间后,再次运行这个任务。也是要线程在池中时,禁止同一个任务进入线程池  。也就是  每个任务都是Key,在线程池中等待和运行的任务key唯一,用什么办法.我要有示例..
    谢谢了
      

  3.   


    //加入线程, 这个也是一个线程启动,间隔1分钟运行一个
    foreach (Task item in tasks)
                            {
                                if (!item.State && item.IsRun())
                                {
                                    ThreadPool.QueueUserWorkItem(new WaitCallback(item.DoWork), null);
                                }
                            }Task 类的方法
            public bool IsRun()
            {
                return DateTime.Now.TimeOfDay >= sleep;
            }           public bool State
            {
                get
                {
                    return _state;
                }
                
            }
    public void DoWork(object obj)
            {
                //当有程序调此方法时,将任务的状态改为true
                _state = true;            if (!IsNew)
                {
                    Init();                IsNew = true;
                }            if (DoWork())
                {
                    object  temp = Data(text); // text的值有设置,DoWork用于分析字符串                if (temp != null)
                    {
                        if (!Items.Exists(item => item.Time.Equals(temp.Time)))
                        {
                            Items.Add(temp);                        Save(temp);                        sleep = stock.Time.AddMinutes(6).TimeOfDay;                        if (Items.Count > 1)
                            {
                                Check();
                            }                        //通知道所有OB,产生了一条新的数据
                            if (Insert != null)
                                Insert(temp);
                        }
                        else
                        {
                            sleep = DateTime.Now.AddSeconds(60).TimeOfDay;
                        }                }
                    else
                    {
                        if (DateTime.Now.TimeOfDay > TimeSpan.Parse("9:36:00"))
                        {
                            _state = true; //此线程不必运行了
                        }
                        else
                        {
                            _state = false;
                        }
                    }            }
                else
                {
                    if (Error != null)
                        Error(msg);
                    sleep = DateTime.Now.AddSeconds(30).TimeOfDay;                _state = false;
                }                   }
      

  4.   


    //加入线程, 这个也是一个线程启动,间隔1分钟运行一个
    foreach (Task item in tasks)
                            {
                                if (!item.State && item.IsRun())
                                {
                                    ThreadPool.QueueUserWorkItem(new WaitCallback(item.DoWork), null);
                                }
                            }
    这块是
      

  5.   

    调试了,是Thread.Sleep() 这个方法引起了异常,是传入的参数引起错误
      

  6.   

    注册Application.Exit事件
    添加System.Diaglogsis.Debugger.Break();
    程序退出的时候会自动断点停止。
    然后查看调用堆栈。看看那个方法出问题了。
      

  7.   

    我准备改代码,不用ThreadPool,用Thread看看
    创建 List<Task> 对象,  在Task类中,定义一个Thread对象.当Task对象时,运行线程,请问这样要注意什么吗?
      

  8.   

    建议先用console程序跑下.用cmd去执行程序,就算没有catch,也会抛出异常