首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Threading.Timer线程停止现象解析

2013-07-11 
Threading.Timer线程终止现象解析我有一个WCF服务方法调用一个集合的ADD方法代码如下[ServiceBehavior(Ins

Threading.Timer线程终止现象解析
我有一个WCF服务方法调用一个集合的ADD方法代码如下


   [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class BookService : IBookService
    {
        public void AddBook(Book book)
        {
            WcfServiceLibrary1.ServiceHelp.BookList.AddBook(book);
        }
    }


这个BOOKLIST的代码如下

        public class BookList
        {
            private static List<Book> _list = null;

            public BookList()
            {
                _initializerList();
            }

            private void _initializerList()
            {
                if (_list == null)
                {
                    _list = new List<Book>();
                    for (int i = 0; i < 10; i++)
                    {
                        _list.Add(new Book() { BookName = "C#" + i, BookNO = Guid.NewGuid(), BookPrice = 10 * i , NeedShow=true});
                    }
                }
            }

            /// <summary>


            /// 提供给WCF,以此获取新的实例
            /// </summary>
            /// <param name="item"></param>
            public static void AddBook(Book book)
            {
                var temp = _list.Find(p => { return p.BookNO == book.BookNO; });

                if (temp == null)
                {
                    /*初始化一个新的对象*/
                    lock (_list)
                    {
                        _list.Add(book);
                        Console.WriteLine("编号{0}的书本添加成功", book.BookNO);
                    }
                }
            }

            public List<Book> GetBookList()
            {
                return _list;
            }
        }


现在有个定时器(Threading.Timer)调用
   /// <summary>
        /// 服务启动
        /// </summary>
        public void OnSatrt()
        {
            _msq = new BookList();


            //int interval = 1000;
            double interval = 5000;
            Timer timer = new Timer(new TimerCallback(timer_Elapsed), null, 0, 1000);//timer_Elapsed, null, 0, 1000);

            //double interval = 5000;
            //Timer timer = new Timer(interval);
            //timer.Elapsed += timer_Elapsed;// new ElapsedEventHandler(timer_Elapsed);
            //timer.AutoReset = true;
            //timer.Enabled = true;
        }

        //void timer_Elapsed(object sender, ElapsedEventArgs e)
        //{
        //    throw new NotImplementedException();
        //}

        void timer_Elapsed(object sender)
        {            
            var list = _msq.GetBookList().FindAll(p => { return p.NeedShow; });
            Console.WriteLine("=============={0}:线程名{1}执行数据量{2}=============", DateTime.Now.ToString("HH:mm:ss"), Thread.CurrentThread.Name, list.Count);
            list.ForEach(p =>
            {
                p.NeedShow = false;
                Console.WriteLine(p.BookName);
            });
        }


当外部程序引用WCF中的ADD方法时,定时器中的回调会出现线程卡死的情况,望解析 多线程 WCF?

分享到:
[解决办法]
 Timer timer可能被注销,实例一个全局 Timer timer

热点排行