C# 从另一个类输出数据以形成表单的正确方法是什么

C# 从另一个类输出数据以形成表单的正确方法是什么,c#,winforms,multithreading,C#,Winforms,Multithreading,我有一个Form1,我在另一节课上做一些处理。 将信息输出到Form1textBox9的正确方式是什么 我就是这样做的,但它只在窗体处于活动状态时部分工作 这就是我在班上学到的: var form = Form.ActiveForm as Form1; if (form != null) { form.updateLabel("DBadd[" + counter + "]" + NAME2); } 这是我表格1中的内容: delegate void updateStatus(Stri

我有一个Form1,我在另一节课上做一些处理。 将信息输出到Form1
textBox9
的正确方式是什么

我就是这样做的,但它只在窗体处于活动状态时部分工作

这就是我在班上学到的:

var form = Form.ActiveForm as Form1;
if (form != null)
{
 form.updateLabel("DBadd[" + counter + "]" + NAME2);
}
这是我表格1中的内容:

    delegate void updateStatus(String value);
    public void updateLabel(String value)
    {
        if (textBox9.InvokeRequired)
        {
            updateStatus del = new updateStatus(updateCodemicroLabel);
            textBox9.Invoke(del, new object[] { value });
        }
        else
        {
            {
                textBox9.Text = value;
            }
        }
    }
我的班级就是这样称呼的:

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        new className().runTask();
    }

您不需要使用
Form.ActiveForm
而是需要将实例传递给类,以便它可以调用
which.updateLabel()
使用
任何作为实例的

返回数据的正确方法是在worker类中实现一个方法,并在表单的成员变量或配置参数中获取返回值。根据类执行的任务,任务可能需要在后台工作线程中执行,然后更新表单的成员变量。有关如何在后台线程中运行任务的更多信息,请参阅MSDN

参考和有用的页面:


Fyi,
textBox9
是一个可怕的(默认)名称。您真的应该将控件重命名为有意义的名称!第一个块中的“类”是如何实例化的?