在窗口的Load事件中将图片的Panel的Visible置为True状态,并启动一个新线程,用来连接数据库后动态创建单选框和复选框,创建结束后再隐藏图片,但是程序运行时,图片是显示出来了,但在创建动态控件时,gif图片一直不动,直到单选框和复选框创建结束后,图片就隐藏了,我自己认为虽然是在新线程中创建控件,但是还是在主线程中,所以导致gif不动,不知是不是这个原因,有哪位遇到过同样的问题啊,能不能提供一下解决方法,在此万分感谢!
11 个解决方案
#1
难道没有人遇到这个情况吗?
#2
没有试过,无法确定。
倒是碰到过本来动变得不动的情况。
倒是碰到过本来动变得不动的情况。
#3
创建控件是执行在UI线程的,播放gif也是执行在UI线程,这样在创建控件时就卡住了gif。
#4
那请问用什么方法解决啊
#5
参考一下这个
//DataGridView 单元格里显示gif图片
int imgIndex = 0;
var t = new System.Threading.Timer(new System.Threading.TimerCallback((o) =>
{
FrameDimension fd = new FrameDimension(imgs[2].FrameDimensionsList[0]);
int count = imgs[2].GetFrameCount(fd);
imgIndex++;
if (imgIndex == count)
{
imgIndex = 0;
}
imgs[2].SelectActiveFrame(fd, imgIndex);
this.Invoke(new Action(() =>
{
dataGridView1[2, i].Value = imgs[2];
dataGridView1.InvalidateCell(2, i);
}));
}), null, 0, 100);
//DataGridView 单元格里显示gif图片
int imgIndex = 0;
var t = new System.Threading.Timer(new System.Threading.TimerCallback((o) =>
{
FrameDimension fd = new FrameDimension(imgs[2].FrameDimensionsList[0]);
int count = imgs[2].GetFrameCount(fd);
imgIndex++;
if (imgIndex == count)
{
imgIndex = 0;
}
imgs[2].SelectActiveFrame(fd, imgIndex);
this.Invoke(new Action(() =>
{
dataGridView1[2, i].Value = imgs[2];
dataGridView1.InvalidateCell(2, i);
}));
}), null, 0, 100);
#6
学习。
#7
这应该是在网页中吗,我说的是在WinForm中
#8
主线程播放GIF.其他播放的话GIF是不动的
#9
你会不会看?网页中怎么可能在后台每100毫秒刷新页面的?
#10
后台线程需要跳转到UI线程才能操作界面对象的,可以用过Invoke方法调用,或者用timer实现
#11
自己想办法解决了,谢谢大家的回答
#1
难道没有人遇到这个情况吗?
#2
没有试过,无法确定。
倒是碰到过本来动变得不动的情况。
倒是碰到过本来动变得不动的情况。
#3
创建控件是执行在UI线程的,播放gif也是执行在UI线程,这样在创建控件时就卡住了gif。
#4
那请问用什么方法解决啊
#5
参考一下这个
//DataGridView 单元格里显示gif图片
int imgIndex = 0;
var t = new System.Threading.Timer(new System.Threading.TimerCallback((o) =>
{
FrameDimension fd = new FrameDimension(imgs[2].FrameDimensionsList[0]);
int count = imgs[2].GetFrameCount(fd);
imgIndex++;
if (imgIndex == count)
{
imgIndex = 0;
}
imgs[2].SelectActiveFrame(fd, imgIndex);
this.Invoke(new Action(() =>
{
dataGridView1[2, i].Value = imgs[2];
dataGridView1.InvalidateCell(2, i);
}));
}), null, 0, 100);
//DataGridView 单元格里显示gif图片
int imgIndex = 0;
var t = new System.Threading.Timer(new System.Threading.TimerCallback((o) =>
{
FrameDimension fd = new FrameDimension(imgs[2].FrameDimensionsList[0]);
int count = imgs[2].GetFrameCount(fd);
imgIndex++;
if (imgIndex == count)
{
imgIndex = 0;
}
imgs[2].SelectActiveFrame(fd, imgIndex);
this.Invoke(new Action(() =>
{
dataGridView1[2, i].Value = imgs[2];
dataGridView1.InvalidateCell(2, i);
}));
}), null, 0, 100);
#6
学习。
#7
这应该是在网页中吗,我说的是在WinForm中
#8
主线程播放GIF.其他播放的话GIF是不动的
#9
你会不会看?网页中怎么可能在后台每100毫秒刷新页面的?
#10
后台线程需要跳转到UI线程才能操作界面对象的,可以用过Invoke方法调用,或者用timer实现
#11
自己想办法解决了,谢谢大家的回答