可以做把form的对象传给类   不过想用委托实现  整半天正不明白了  最好能给个简单的小例子  多谢

解决方案 »

  1.   

    在form中写个public的方法,在类中调用这个方法更新界面。
      

  2.   


    class A
        {
            public event EventHandler viewProcess;        private void RaiseviewProcess(object sender, EventArgs e)
            {
                if (viewProcess != null)
                {
                    viewProcess(sender, e);
                }
            }
            private void aaaa()
            {
                RaiseviewProcess(this,new EventArgs());
            }
        }
    class Form1
    {
        public Form1()
            {
                ....
                A  a1= new A();
                a1.viewProcess += (o,e) = > { 更新控件代码 };
            }
    }
      

  3.   

            Thread thread1, thread2;
            Object obj = new object();
            List<ManualResetEvent> mres = new List<ManualResetEvent>();
            Task task = new Task();        private void button1_Click(object sender, EventArgs e)
            {
                richTextBox1.Text = "";
                Test();
            }
            public void Test()
            {
                task.OnMessageNotice += invokeMsg;
                ManualResetEvent mre1 = new ManualResetEvent(false);
                mres.Add(mre1);
                ManualResetEvent mre2 = new ManualResetEvent(false);
                mres.Add(mre2);
                thread1 = new Thread(new ParameterizedThreadStart(task.DoWork));
                thread2 = new Thread(new ParameterizedThreadStart(task.DoWork));            DataCls data1 = new DataCls(1, mre1);
                DataCls data2 = new DataCls(2, mre2);
                thread1.Start(data1);
                thread2.Start(data2);
                WaitHandle.WaitAll(mres.ToArray());
                lock (obj)
                {
                    richTextBox1.AppendText("任务已完成");
                }        }
            public delegate void SetTextHanlder(string msg);
            private void invokeMsg(String obj){            if (richTextBox1.InvokeRequired)
                {
                    richTextBox1.BeginInvoke(new SetTextHanlder(SetText), new object[] { obj });
                }
            }
            private void SetText(string msg)
            {
                lock (obj)
                {
                    richTextBox1.AppendText("\r\n" + msg);
                }
                //}
            }        private void DoWork(object obj)
            {
                Invoke(new SetTextHanlder(SetText), new object[] { obj });
            }
        }    //消通知委托
        public delegate void MessageNotice(string msg);
        //任务类 
        public class Task
        {
            public event MessageNotice OnMessageNotice;
            public void DoWork(object state)
            {
                DataCls data = state as DataCls;
                MessageNoticeHandler(string.Format("每{0}个任务正在执行......", data.count));
                //执行任务 具体任务就不写了用sleep代表任务要用很长时间。
                Thread.Sleep(3000);
                MessageNoticeHandler(string.Format("每{0}个任务执行完成", data.count));            data.m_mre.Set();
            }        protected void MessageNoticeHandler(string msg)
            {
                if (OnMessageNotice != null)
                {
                    OnMessageNotice(msg);
                }
            }    }    public class DataCls
        {
            public ManualResetEvent m_mre;
            public int count;
            public DataCls(int i,ManualResetEvent mre)
            {
                count = i;
                m_mre = mre;
            }
        }
      

  4.   

    class MyClass
    {
        Action<string> UpdateLabel;
        public MyClass(Action<string> updatelabel)
        { UpdateLabel = updatelabel; }
        public void Func()
        {
            if (UpdateLabel != null) UpdateLabel("hello");
        }
    }
    窗体调用:
    MyClass mc = new MyClass((x) => { label1.Text = x; });
    mc.Func();
      

  5.   

    我对着写了一个  class1里的事件对象一直是null啊