当我点窗体上的Upload, Upload所做的如下private void Upload()
{
    Cursor.Current = Cursors.WaitCursor;
    bool bRet = setting.UpLoad();//这边调用的控件中Upload函数
    Cursor.Current = Cursors.Default;
    if(bRet)
        MessageBox.Show("Upload Success", "Message");
    else
        MessageBox.Show("Upload Fail", "Message");
}现在所要做的是,如何把控件中Upload的进度显示在另一个Form的ProgressBar上希望不要只跟我说多线程,也知道是要多线程来实现委托的话,要如何传值,希望给个简单的Code.

解决方案 »

  1.   

    Code:
    Form1using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace Upload//此处改成你自己的命名空间
    {
        public partial class Form1 : Form
        {
            public delegate void UploadHandler(object sender, EventNumber e);
            public event UploadHandler EventUpLoad;
            //定义一个Timer,用以演示Upload方法
            Timer timer1;
            int value;
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                value = 0;
                timer1 = new Timer();
                timer1.Interval = 1000;
                timer1.Start();
                timer1.Tick += new EventHandler(timer1_Tick);
                Form2 f2 = new Form2(this);
                f2.Show();
            }
            
            void timer1_Tick(object sender, EventArgs e)
            {
                value++;
                if (value < 100)
                {
                    EventNumber en = new EventNumber(value);
                    EventUpLoad(this, en);//触发事件
                }
                else
                    value = 0;
            }
        }    /// <summary>
        /// 定义一个事件数据类,用于传值
        /// </summary>
        public class EventNumber : EventArgs
        {
            int _No;
            public int No
            {
                get { return _No; }
                set { _No = value; }
            }
            public EventNumber(int v)
            {
                _No = v;
                
            }
        }
    }
    Form2:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace Upload
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
            public Form2(object sender)
            {
                InitializeComponent();
                Form1 f = (Form1)sender;
                f.EventUpLoad += new Form1.UploadHandler(f_EventUpLoad);
            }        void f_EventUpLoad(object sender, EventNumber e)
            {
                label1.Text = "Form1的值己变更:" + e.No;
                progressBar1.Value = e.No;
            }
        }
    }
      

  2.   

    实现的基本思路是在Fomr2中的一个方法体中使用Form1的引用,我使用的是在实例化方法中使用.
    Form1 f1=(Form1)sender;
    注意,千万不要new Form1。
    然后,你就可以任取f1的值了。