写了个 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#