如何新开一个线程来刷新label1.Text ??
请教各位前辈:如何新开一个线程来刷新label1.Text ??
1. 创建Thread需要一个Method
2. 这个Method要求无参
3. 于是吧它放在一个类 Method_Class中,
但是,怎么把label1.text传递到类或对象中呢?
Function(ref label1.text) 出错,说是label1.text不能这么用!!
刚学一段时间,一个项目着急完成,多谢了!! --------------------编程问答-------------------- 类是有构造函数的,默认的时候构造函数无参数,您可以在在构造函数加个参数,在实现化时传参数就可以了. --------------------编程问答-------------------- 在该类中定义一个public的属性为Label
然后实例化该类后给此属性赋值
或者使用委托在线程中抛出事件外面来接收
修改Label的时候使用Invoke --------------------编程问答-------------------- Thread _t = new Thread(new ThreadStart(reflesh))
_t.Start();
public void reflesh()
{
this.lable1.Reflesh();
} --------------------编程问答-------------------- 你的意思是要把lablel.1传给Method操作吧
可以这样
public class Method_class
{
private Label mLb;
private string mUpdateText = "";
public string UpdateText
{
set{mUpdateText = value;}
}
public Method_class(Label lb)
{
mLb = lb
}
public void Method()
{
mLb.Text = mUpdateText
}
} --------------------编程问答-------------------- 不同线程调用控件,为了控件安全,需要使用委托
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf getItem), ti) Then
Thread.Sleep(1000)
Me.Text = "123"
End If
end sub
Sub getItem(ByVal str1 As Object)
Dim ti As TaskInfo = CType(str1, TaskInfo)
BeginInvoke(New EventHandler(AddressOf addMsg), "abc")
End Sub
Sub addMsg(ByVal sender As Object, ByVal e As System.EventArgs)
TextBox1.Text = sender.ToString
End Sub
注意,委托不能用于shared声明的方法中,如果上述sub getitem及addmsg声明为shared sub 则不能成功进行委托
另,如果只是简单调用,你人工判断觉得调用安全的(比如只有一个线程对控件进行赋值)懒得写这些代码可以在在对控件赋值之前执行这样一句代码,将线程安全的判断关闭:
CheckForIllegalCrossThreadCalls = False
这代码你放在formload或者main事件中执行,反正在赋值之前调用就OK了
--------------------编程问答-------------------- 第2项new Thread(new ThreadStart(Fun),好像可以传一个object数组进取的说。。。
补充:.NET技术 , C#