WinForm中ListView中图片切换过慢的问题

XUYH3307 2013-01-07 10:18:59
最近出现一个很怪的问题。

我后台有对象实例与前台ListView中的ListItem相对应——当后台对象实例的状态改变时,前台与之对应的ListItem的ImageIndex也要跟着变化(也就是说不通状态下同一个ListItem的图片是不一样的)。
我在自己的电脑上试过,图片的切换速度很快,基本没有什么影响,当然也试过很多同事的电脑,都没有什么问题。

但终于还是出问题了——我在一台电脑上测试的时候发现图片切换起来真的是很慢很慢,大概要30秒才完成。另外,我发现这台电脑和我先前的电脑的区别之一是CPU不一样——以前都是用Intel的,这台是AMD的。

我的做法是采用事件触发方式做的——也就是说,后台状态变化后公布事件,前台ListView订阅事件并进行图片的切换,由于涉及不同的线程,所以也用了Invoke处理,相关代码如下:


public void ListViewImageIndexUpdate(object sender, StatusEventArgs e)
{
if ((sender as AirCondition).IsDisp == true)
{
this.Invoke((EventHandler)(delegate
{
foreach (ListViewItem lvi in LvAirCdtDisplay.Items)
{
if ((AirCondition)lvi.Tag == (AirCondition)sender)
{
lvi.ImageIndex = e.Status;
break;
}
}
}))
}
}

还望各位大虾赐教!感激不尽!!
...全文
244 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
XUYH3307 2013-01-08
  • 打赏
  • 举报
回复
引用 5 楼 TreeNode_2012 的回复:
C# code?12345678910111213141516171819public void ListViewImageIndexUpdate(object sender, StatusEventArgs e){ if ((sender as AirCondition).IsDisp == true) { forea……
这个不行的,因为foreach包含的语句都是跨线程操作的。
路边一青蛙 2013-01-08
  • 打赏
  • 举报
回复

public void ListViewImageIndexUpdate(object sender, StatusEventArgs e)
{
    if ((sender as AirCondition).IsDisp == true)
    {
        
            foreach (ListViewItem lvi in LvAirCdtDisplay.Items)
            {
                if ((AirCondition)lvi.Tag == (AirCondition)sender)
                {
this.Invoke((EventHandler)(delegate
        {
                    lvi.ImageIndex = e.Status;
}))
                    break;
                }
            }
        
    }
}

这样是不是更好呢?
XUYH3307 2013-01-08
  • 打赏
  • 举报
回复
引用 2 楼 bdmh 的回复:
你使用了多线程,线程有多少,两台机器的cpu核数怎样,amd机器的环境如何,是否跑了很多程序
其实也不能说是多线程,只是在Winform中开了个定时器(System.Timers.Timer)查询后台实例的状态,如果发现状态有变化,就触发与实例对应的ListItem进行图片切换。 AMD处理器是双核的,有1.93GHz,Intel那台是酷睿单核的,几年前的老机子。 当时真正活动的程序都很少。
XUYH3307 2013-01-08
  • 打赏
  • 举报
回复
其实也不能说是多线程,只是在Winform中开了个定时器(System.Timers.Timer)查询后台实例的状态,如果发现状态有变化,就触发与实例对应的ListItem进行图片切换。 AMD处理器是双核的,有1.93GHz,Intel那台是酷睿单核的,几年前的老机子。 当时真正活动的程序都很少。
bdmh 2013-01-08
  • 打赏
  • 举报
回复
你使用了多线程,线程有多少,两台机器的cpu核数怎样,amd机器的环境如何,是否跑了很多程序
GoodbyeYingHuaLuo 2013-01-08
  • 打赏
  • 举报
回复
我也遇见过这样的问题,求解,顶一下!
XUYH3307 2013-01-08
  • 打赏
  • 举报
回复
对不起各位,我玩乌龙了,问题出在另外的地方,只是C#并没有报错!! 谢谢大家!

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧