Form1中代码如下:(添加一个Button控件和一个label控件)
delegate void UpdateUIDelegate(string text, Color color,Form1 form);
        public  void UpdateUI(string text, Color color,Form1 form)
        {
            
            if (this.label1.InvokeRequired)
            {
                UpdateUIDelegate UIUpdater = new UpdateUIDelegate(UpdateUI);//实例化代理 
                this.Invoke(UIUpdater, new object[] { "newText", Color.Green,form }); //同步调用代理,参数与代理方法中形参对应 
            }
            else 
            {
            label1.Text = text;
            label1.ForeColor = color;
            }
           
        }
private void button1_Click(object sender, EventArgs e)
        {
            Class1 c = new Class1();
            c.startThread();
     
}
Class1类如下:
class Class1
    {
        Form1 form = new Form1();
        Thread myWorkerThread;
        public void startThread()
        {
            myWorkerThread = new Thread(new ThreadStart(ExecuteProcessing));
            myWorkerThread.Start();
        }
       
     public  void ExecuteProcessing()
        {            form.UpdateUI("newText", Color.Green, form);
    
        }
    }
程序功能很简单,仅为了测试,Form1中调用class1的方法StartThread,在这个方法中开启一个线程,在次线程中完成在主窗体中显示一个绿色的newText。
问题:程序执行到了相关代码,但主窗体中没有相关显示。

解决方案 »

  1.   

    Form1 form = new Form1();//你这里创建了一个新的Form1
    你这个form应该在Class1的构造函数中赋值,例如
    class Class1
    {
        public Class1(Form host)
        {
            form = host;
        }
    }
      

  2.   

    帮你整理一下,希望你能学会匿名委托来简化你的代码。public void UpdateUI(string text, Color color)
    {
    if (this.label1.InvokeRequired)
    {
    this.Invoke((EventHandler)delegate{UpdateUI(text,color);});
    return;//避免继续执行
    }
    label1.Text = text;
    label1.ForeColor = color;
    }private void button1_Click(object sender, EventArgs e)
    {
    Class1 c = new Class1();
    c.startThread();
    }class Class1
    {
    public void startThread(Form1 host)
    {
    new Thread((ThreadStart)delegate
    {
        form.UpdateUI("newText", Color.Green, form);
    }).Start();
    }
    }