new Thread(() => { object result = 耗时函数();//用result干其他事 }).Start();

解决方案 »

  1.   

    await Task.Factory.StartNew(你的代码);
      

  2.   

                //System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(一些长期任务));            //System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(另一个长期任务));        private void 一些长期任务(Object state)
            {
                // 插入代码来执行一项艰巨的任务。
                this.Invoke(new Action(() => { resultLabel.Text = "0"; }));
                int aa = 100;
                do
                {
                    System.Threading.Thread.Sleep(1000);
                    this.Invoke(new Action(() => { resultLabel.Text = (int.Parse(resultLabel.Text) + 1).ToString(); }));
                } while (--aa > 0);
                
            }        private void 另一个长期任务(Object state)
            {
                // 插入代码来执行一项艰巨的任务。
            }
    我学编程是漫不经心的以上也是不久前学的例子看能否作参考
      

  3.   

    http://bbs.csdn.net/topics/390900344
      

  4.   

    http://www.blogjava.net/sitinspring/archive/2007/06/28/126809.html
    “使用回调和线程处理一个耗时响应过程”偶还没有学习理解。
      

  5.   

    延迟时间的方法
     private void Frm_Main_Load(object sender, EventArgs e)
            {
                Thread th = new Thread(//创建线程对象
                    () =>//使用Lambda表达式
                    {
                        while (true)//无限循环
                        {
                            Invoke(//在窗体线程中执行
                                (MethodInvoker)(() =>//使用Lambda表达式
                                {
                                    txt_Time.Text =//显示系统时间
                                        DateTime.Now.ToString("F");
                                }));
                            Thread.Sleep(1000);//线程挂起1000毫秒
                        }
                    });
                th.IsBackground = true;//设置线程为后台线程
                th.Start();//开始执行线程
            }
      

  6.   

    WinForm吧?   在循环里加Application.DoEvents()
      

  7.   

    BackgroundWorker 这东西能满足你的需求吧?
      

  8.   

    一个简单的异步回调示例:
    public void BeginTransfer(EnumFtpControl ctrl, Action endCallback)
    {
    ....
    Task transferTask = new Task(transferAction, TaskCreationOptions.LongRunning);
    transferTask.ContinueWith(lastTask =>
    {
    if (TransferState != EnumTransferState.Aborting)
    endCallback();
    TransferState = EnumTransferState.Standby;
    }); transferTask.Start();
    TransferState = EnumTransferState.Transferring;
    }TransferPacker.Instance.BeginTransfer(BasicConfig.EnumFtpControl, () =>
    {
    logger.Info("FTP - 传输已经完成(SeqID:{0})", SeqID);
    TestStoped();
    });
      

  9.   

    最简单的方法:async/await(需要C# 5.0)。async/await的好处在于编写异步方法的逻辑顺序和同步方法的逻辑顺序是一致的,非常容易理解。
            // 将按钮的Click事件处理函数声明成async的
            private async void button1_Click(object sender, EventArgs e)
            {
                int result = await TimeConsumingMethodAsnyc(1);
                MessageBox.Show(result.ToString());
            }        // 用async方法包装耗时函数
            private async Task<int> TimeConsumingMethodAsnyc(int arg)
            {
                return await Task.Run(() => TimeConsumingMethod(arg));
            }        // 耗时函数
            private int TimeConsumingMethod(int arg)
            {
                Thread.Sleep(10000); // 模拟耗时过程
                return arg; // 有返回值
            }
      

  10.   

    .NET Framework的异步编程模式主要有三种,基于任务的异步模式(TAP)是建议的方法,C# 5.0引入的async/await使得TAP模式的易用性极大的提高了。关于.NET Framework的异步编程模式,请参看http://msdn.microsoft.com/zh-cn/library/jj152938(v=vs.110).aspx
      

  11.   

    肯定是异步操作,使用多线程的了。使用委托和事件都行,目的都是只有一个:在耗时操作结束前,当前线程应该处理自己的业务逻辑。耗时操作完毕后返回参数,通过某种方式通知当前线程,当前线程执行后续逻辑。本人昨天做的一个很类似的小功能,使用BackgroundWorker实现的,感觉非常完美。可以参考MSDN或者找我交流下,要源码。
      

  12.   

    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(v=vs.110).aspx