请问c#中如何在静态函数中得到实例类的中控件值,主界面类Form1中,有一个静态函数(用于另一个线程),这个函数中需要得到和设置主界面上的控件值,现在我已经实现设置控件的值,但是不知道如何获取控件的值。设置控件的置是用委托实现的,我估计得到也是用委托,但是设置委托只是单向传递参数,并没有返回值,现在要获取主界面的控件值,肯定要有什么返回值之类的,不知道如何写。本来此线程没有用到静态函数,但是因为要传参数,就用了参数化委托:
Thread t1 = new Thread(new ParameterizedThreadStart(Form1.check))
结果老提示委托或重载不匹配之类的,把check函数改成static就没这个错误了,但是现在check函数中的:
if (this.textbox1.text=="")  这样的代码就不行了,不能用了,所以,问题可以规结为:如何在c#线程中得到和设置主线程控件的值,分为得到和设置2方面。

解决方案 »

  1.   


        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                SetText(this);
            }        private void button2_Click(object sender, EventArgs e)
            {
                GetText(this);
            }        public static void SetText(Form1 frm)
            {
                frm.textBox1.Text="Hullo World!";
            }        public static void GetText(Form1 frm)
            {
                MessageBox.Show(frm.textBox1.Text);
            }
        }
      

  2.   

    2楼的办法我测试了一下,如果不做线程可以实现,问题是我现在是要传递参数到线程中,现在还是提示老错误:
    “check”的重载均与委托“System.Threading.ParameterizedThreadStart”不匹配我在:
    ThreadCheck cls1 = new ThreadCheck(1, 100,this);  //这里的this就是我在参数中新带的form1类型的指针
    Thread t1 = new Thread(new ParameterizedThreadStart(Form1.check))
    t1.IsBackground = true;
    t1.Start(cls1);这段代码中传了cls1这个类,这个类就是封装了参数,并且check的原型:
    public static void check(ThreadCheck tck) 我现在就搞不懂了,为什么还提示不匹配啊。
      

  3.   

    public static void check(ThreadCheck tck)  改成
    public static void check(Object tck)
      

  4.   

    刚才google找到原因了,上来一看你也是给出了同样的方法,还是要多谢你。
      

  5.   

    在check方法内部
    通过 tck as ThreadCheck 或者 (ThreadCheck)tck 将实参转为ThreadCheck 
      

  6.   

    关键就是参数只能是以object类型传递,到里面再转换成想要的类型。