将文本从单独的类发布到activeform

时间:2011-10-13 16:17:11

标签: c# .net winforms multithreading

我正在尝试将课程中的文本发布到活动表单中,并且我在确定如何执行此操作时遇到了一些麻烦。我见过很多关于使用Invoking在线程/表单中发布内容但我无法让我的类看到activeform中的任何公共函数。

实施例

// File: Form1.cs

namespace Form1
{
    public partial class Form1 : Form
    {
        public void SetText(string text)
        {
            this.Invoke((MethodInvoker) delegate { \\ Always requires invoke
                TextBox1.Text += text + "\n";
        });
    }
}

然后我的第二个类在第二个线程中运行(因为它是一个很长的过程)

// File: Class.cs

using Form1;

namespace Form1
{
    public void DoSomething() // Called in Form1
    {
        // Does stuff

        string TextToGoBack; // Has text when DoSomething runs

        // Here is where I get stuck
        Form form = Form1.ActiveForm;

        form.SetText(TextToGoBack); // SetText is not showing up here no matter what I do
    }
}

编辑:

我不会反对使用自定义事件来完成相同的事情,但我也很难解决这些问题。

1 个答案:

答案 0 :(得分:1)

Form.ActiveForm会返回Form个对象,而不是Form1类的实例,因此没有SetText方法。

您可以将它投射到Form1,但这会很脆弱。我会将Form1的实例传递给您的DoSomething方法。