C# 在C中从线程调用表单控件#

C# 在C中从线程调用表单控件#,c#,multithreading,C#,Multithreading,我现在陷入了一个很深的问题。请帮我做这个 我创建了一个名为form1的表单。它包含一个文本框T1。我开始运行它。。。 在form1中有一个线程正在运行,它执行某个进程P,该进程是另一个类的成员,称之为class2。 要运行进程P,我需要文本框T1中的值。我该怎么做 让我告诉你,我已经试过了。 我在类2中创建了form1的实例,然后尝试读取textbox(T1)值。但那是空的,我找到了原因。。。。剩下的,我试过了。。。再次失败 请帮我做这个。我从几个小时就被卡住了……试试这个 Assumi

我现在陷入了一个很深的问题。请帮我做这个

我创建了一个名为form1的表单。它包含一个文本框T1。我开始运行它。。。 在form1中有一个线程正在运行,它执行某个进程P,该进程是另一个类的成员,称之为class2。 要运行进程P,我需要文本框T1中的值。我该怎么做

让我告诉你,我已经试过了。 我在类2中创建了form1的实例,然后尝试读取textbox(T1)值。但那是空的,我找到了原因。。。。剩下的,我试过了。。。再次失败

请帮我做这个。我从几个小时就被卡住了……

试试这个

    Assuming Class1 is the class which does some process in thread. Create the property which corresponds to type of your main form. In this case, its called Form1. 



     class Class1
        {
    //his is the property
            public Form1 MyMainForm { get; set; }

            public  void    ShowText()
            {

//here the control is accesses 
//((TextBox)MyMainForm.Controls.Find("textBox1",true)[0])
                MessageBox.Show(((TextBox)MyMainForm.Controls.Find("textBox1",true)[0]).Text);
            }
        }

    im assuming ShowText() method is called on new thread, when button is clicked.

     private void button1_Click(object sender, EventArgs e)
            {
    //craete instance of class1
                Class1 c = new Class1();
    //set the  property            
    c.MyMainForm = this;
    //start the method is new thread
                ThreadStart ts=new ThreadStart(c.ShowText);
                Thread t=new Thread(ts);
                t.Start();
            }
你们班

ClassText
{
   YourClass(String textVAlue)
   {
   }
 }
你的表格

ClassText ct = new ClassText();
ct.YourClass(Textbox1.text);

这只是一个例子,告诉你正确的方向。正如在另一个答案中提到的,您可能必须调用以防止跨线程异常

在名为表单的类中添加方法或属性:

public string GetTextboxContent()
{
    return textbox.Text;
}
将您的class2更改为以下内容:

class class2
{
    private MyForm m_form;

    public class2(MyForm form)
    {
        m_form = form;
    }

    public void DoThreadStuff()
    {
        string value = m_form.GetTextboxContent();
    }
}

您说“我在class2中创建了form1的实例,然后尝试读取textbox(T1)值。但该值为空”:不要创建新实例:将现有实例传递给class2

这就是我的问题。。。。如何访问创建它的线程的控件,在本例中是主线程。对不起,我太愚蠢了…这个例子对我没有帮助。。。如果我创建form1的新实例。这将重新创建所有变量和控件。这是没有意义的,所有的值在开始时都是空的。这不会给我主线程所需的值。@JasimKhanAfridi是的,构造函数中的参数应该是表单的类型。