当前位置:编程学习 > C#/ASP.NET >>

写了个 listview 延时加载 缩略图的 代码,但是老是陷入死循环,求指点

代码如下  ,
在  do
                {                  
                    Thread.Sleep(100);
                } while (!IsGetcOver);  这里老师陷入死循环

/// <summary>
        /// 主角线程
        /// </summary>
        Thread t1;
        /// <summary>
        /// 备胎线程
        /// </summary>
        Thread t2;
        private void ExeImage()
        {
            isnew = false;
            isallgoon = false;
            
            if (t1 != null)
            {
                do
                {                  
                    Thread.Sleep(100);
                } while (!IsGetcOver);
            }
            if (t2 != null)
            {
                do
                {
                    Thread.Sleep(100);
                } while (!IsGetALLImageOver);
            }

            IsGetcOver = false;
            IsGetALLImageOver = false;
            t1 = new Thread(Getc);
            t1.IsBackground = true;
            t1.Start();
            t2 = new Thread(GetALLImage);
            t2.IsBackground = true;
            t2.Start();
        }

        int topindex = 0;
        /// <summary>
        /// 线程开关
        /// </summary>
        bool isnew = true;
        /// <summary>
        /// 主角开关
        /// </summary>
        bool IsGetcOver = true;
        /// <summary>
        /// 备胎开关
        /// </summary>
        bool IsGetALLImageOver = true;

        /// <summary>
        /// 备胎的堵塞
        /// </summary>
        bool isallgoon = false;
        /// <summary>
        /// 主角的方法
        /// </summary>
        public void Getc()
        {

            do
            {
                System.Diagnostics.Debug.WriteLine("主角还在运行!");
                //我来了,其他停下
                isallgoon = false;
                //检查topitem
                ListViewItem lv = listView1.TopItem;
                if (lv.Index != topindex)
                {
                    topindex = lv.Index;
                    //我来生成当前项的缩略图
                    //生成20个
                    int enditem = topindex + 20;
                    //是不是最后一个 
                    if (enditem > listView1.Items.Count - 1)
                    {
                        enditem = listView1.Items.Count - 1;
                    }
                    for (int i = topindex; i < enditem; i++)
                    {
                        try
                        {
                            ListViewItem item = listView1.Items[i];
                            Model.ImageList_tbl_MD mo = item.Tag as Model.ImageList_tbl_MD;
                            Image img = Image.FromFile(Path.Combine(mo.ImageSavePath, mo.SaveName));
                            imlLarge.Images.Add(mo.ImageID.ToString(), img);
                            item.ImageKey = mo.ImageID.ToString();
                        }
                        catch (Exception)
                        {

                        }
                    }
                }
                //好吧我休息下,其他的继续
                isallgoon = true;
                Thread.Sleep(2000);
            } while (isnew);
            IsGetcOver = true;
        }
        /// <summary>
        /// 我是苦命的备胎
        /// </summary>
        public void GetALLImage()
        {
            //遍历item 获取缩略图
            foreach (ListViewItem item in listView1.Items)
            {
                //随时听指挥
                while (!isallgoon && isnew)
                {
                    System.Diagnostics.Debug.WriteLine("备胎还在待命!");
                    Thread.Sleep(100);
                }
                if (!isnew)
                {
                    IsGetALLImageOver = true;
                    break;
                }
                System.Diagnostics.Debug.WriteLine("备胎还在运行!");

                Model.ImageList_tbl_MD mo = item.Tag as Model.ImageList_tbl_MD;
                //检查当前项是否已经加载完成
                if (!imlLarge.Images.ContainsKey(mo.ImageID.ToString()))
                {
                    //加载
                    try
                    {
                        Image img = Image.FromFile(Path.Combine(mo.ImageSavePath, mo.SaveName));
                        imlLarge.Images.Add(mo.ImageID.ToString(), img);
                        item.ImageKey = mo.ImageID.ToString();
                    }
                    catch (Exception)
                    {

                    }
                }
            }
            //全部加载完毕 退出
            IsGetALLImageOver = true;
        }
--------------------编程问答--------------------
发现我还是思维进入了误区, 现在不关是死循环,  largeicon  模式下listView1.TopItem 也取不到值
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,