protected string res=null;
Thread th = new Thread(new ThreadStart(delegate { ThMethod(ip); }));
th.Start();
private delegate string ResBack(string label);
private void ThMethod(string ip)
{
         res =ip+"Hello";
}
在button_click中如何用这个委托去获取res的值?

解决方案 »

  1.   

    一个winform,有两个button,一个开始,一个结束,一个label。
    当点击开始的时候,执行一个很复杂的动作,很耗时。但是界面不能死,所以只能用多线程。
    点击开始,开始按钮隐藏,显示结束按钮。如果不点击结束,则把时间显示出来。
    如果点击了结束。结束那个复杂的操作,显示消耗的时间。。真没人回答吗?
      

  2.   

       private void button1_Click(object sender, EventArgs e)
            {
            
                string ip = "12";
                var th = new Thread(new ThreadStart(delegate { ThMethod(ip); }));
                th.Start();
            }
            protected string res;        private void ThMethod(string ip)
            {
                res = ip + "Hello";            Invoke(new ResBack(xx), new object[] {res});
            }        private string xx(string label)
            {
                Text = label;
                return label;
            }        private delegate string ResBack(string label);
      

  3.   

    MSDN上很经典的例子(看里面第二个Fabonacicc计算的例子)
    backgroundworker
    计时用System.Diagnostics.Stopwatch
      

  4.   

    或者用Control.Invoke
    或者BeginInvoke+EndInvoke+回调
      

  5.   


    protected Thread th;
    private void button1_Click(object sender, EventArgs e)
    {
        th = new Thread(new ThreadStart(delegate { ThMethod(ip, tele, teled); }));
        th.Start();
    }
    private delegate void ResBack(string label);
            private void SetLabValue(string text)
            {
                if (label3.InvokeRequired)
                {
                    ResBack back = new ResBack(SetLabValue);
                    this.Invoke(back, new object[] { text });
                }
                else
                {
                    label3.Text = text;
                }
            }
            private void ThMethod(string ip, string tele, string teled)
            {//得到结果}
    这样写对着没。
      

  6.   

    你说的这种情况不用委托也没问题啊,
    不就类似于这样吗?
    private void button1_Click(object sender, EventArgs e)
            {
                //添加当前主线程名称“main”
                Thread.CurrentThread.Name = "main";            //通过Thread类的构造函数线程,并指示一个委托让线程 执行指定方法
                Thread t = new Thread(new ThreadStart(Add));
                t.Name = "子线程";
                //开始新线程
                t.Start();
                
                Debug.WriteLine(Thread.CurrentThread.Name);
            }
            void Add()
            {
                for (int i = 0; i < 100000; i++)
                {
                    //输出当前执行操作的线程名
                    Debug.WriteLine(Thread.CurrentThread.Name+i);            }
            }
      

  7.   

    Debug.WriteLine(Thread.CurrentThread.Name);你这样必须要等线程结束呢。。
    我是要随时结束线程得到值。