当前位置:编程学习 > C#/ASP.NET >>

如何新开一个线程来刷新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数组进取的说。。。
引用楼主 yiluweiyi 的帖子:
请教各位前辈: 

如何新开一个线程来刷新label1.Text ?? 

1.  创建Thread需要一个Method 
2.  这个Method要求无参 
3.  于是吧它放在一个类 Method_Class中, 

但是,怎么把label1.text传递到类或对象中呢? 

Function(ref label1.text) 出错,说是label1.text不能这么用!! 

刚学一段时间,一个项目着急完成,多谢了!!
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,