从另一个类向Form输出数据的正确方法是什么

时间:2012-07-20 21:25:53

标签: c# winforms multithreading

我有一个Form1,我在另一个类中做了一些处理。 将信息输出到Form1 textBox9的正确方法是什么?

我就是这样做的,但只有在表格处于活动状态时才能部分工作。

这就是我班上的内容:

var form = Form.ActiveForm as Form1;
if (form != null)
{
 form.updateLabel("DBadd[" + counter + "]" + NAME2);
}

这是我在Form1中的原因:

    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();
    }

2 个答案:

答案 0 :(得分:1)

您需要将实例传递给类,而不是使用Form.ActiveForm,因此它可以调用whatever.updateLabel()并将whatever作为实例。

答案 1 :(得分:0)

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

参考文献&有用的页面: