问题描述
请教各位前辈:如何新开一个线程来刷新label1.Text??1.创建Thread需要一个Method2.这个Method要求无参3.于是吧它放在一个类Method_Class中,但是,怎么把label1.text传递到类或对象中呢?Function(reflabel1.text)出错,说是label1.text不能这么用!!刚学一段时间,一个项目着急完成,多谢了!!
解决方案
解决方案二:
类是有构造函数的,默认的时候构造函数无参数,您可以在在构造函数加个参数,在实现化时传参数就可以了.
解决方案三:
在该类中定义一个public的属性为Label然后实例化该类后给此属性赋值或者使用委托在线程中抛出事件外面来接收修改Label的时候使用Invoke
解决方案四:
Thread_t=newThread(newThreadStart(reflesh))_t.Start();publicvoidreflesh(){this.lable1.Reflesh();}
解决方案五:
你的意思是要把lablel.1传给Method操作吧可以这样publicclassMethod_class{privateLabelmLb;privatestringmUpdateText="";publicstringUpdateText{set{mUpdateText=value;}}publicMethod_class(Labellb){mLb=lb}publicvoidMethod(){mLb.Text=mUpdateText}}
解决方案六:
不同线程调用控件,为了控件安全,需要使用委托PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickIfThreadPool.QueueUserWorkItem(NewWaitCallback(AddressOfgetItem),ti)ThenThread.Sleep(1000)Me.Text="123"EndIfendsubSubgetItem(ByValstr1AsObject)DimtiAsTaskInfo=CType(str1,TaskInfo)BeginInvoke(NewEventHandler(AddressOfaddMsg),"abc")EndSubSubaddMsg(ByValsenderAsObject,ByValeAsSystem.EventArgs)TextBox1.Text=sender.ToStringEndSub注意,委托不能用于shared声明的方法中,如果上述subgetitem及addmsg声明为sharedsub则不能成功进行委托另,如果只是简单调用,你人工判断觉得调用安全的(比如只有一个线程对控件进行赋值)懒得写这些代码可以在在对控件赋值之前执行这样一句代码,将线程安全的判断关闭:CheckForIllegalCrossThreadCalls=False这代码你放在formload或者main事件中执行,反正在赋值之前调用就OK了
解决方案七:
第2项newThread(newThreadStart(Fun),好像可以传一个object数组进取的说。。。引用楼主yiluweiyi的帖子:
请教各位前辈:如何新开一个线程来刷新label1.Text??1.创建Thread需要一个Method2.这个Method要求无参3.于是吧它放在一个类Method_Class中,但是,怎么把label1.text传递到类或对象中呢?Function(reflabel1.text)出错,说是label1.text不能这么用!!刚学一段时间,一个项目着急完成,多谢了!!