建议你还是仔细看一下开始页的多线程入门教程(不是要批评你,而是里面有答案)
记住一个原则就行:任何对象都不能跨线程共享使用( gdip.bitmap 也一样 )
winform窗口对象是可以跨线程调用 - 这不等于gdip.bitmap 也可以。
另外,你这个思路也有问题,
线程间交互是有成本的,把gdip.bitmap 传到工作线程又传回来,这完全没有必要嘛。
这相当于在论坛发帖子,跑到机房把服务器抱回家,把帖子保存上去,又把服务器抱回机房。
所以,其实你并不需要这么做,代码可以更简单:import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form")
winform.add(
button={cls="button";text="点里里观赏多线程动画";left=227;top=328;right=456;bottom=401;z=2};
plus={cls="plus";left=234;top=209;right=354;bottom=297;z=1}
)
/*}}*/
var gp=gdip.bitmap("~\extensions\wizard\project2\template\plus\2\res\Images\pl_pause.png").split(4);
winform.plus.setBackgrondIdx = function(i){
winform.plus.background = gp[ i ];
}
winform.button.oncommand = function(){
thread.invoke(
function(winform){
for(i=1;4){
winform.plus.setBackgrondIdx(i);
sleep(500)
}
},winform
)
}
winform.show()
win.loopMessage(); import gdip不需要,因为plus控件会自动导入gdip.bitmap;
线程里不需要 import win.ui ,gp应当用var声明为局部变量。
|