C#异步多线程 [摘]

在多线程的情况下,其它线程无法直接调用到主线程上的控件,只能通过代理来实现主线程上控件的调用。

1、定义委托

  // 执行任务的委托声明(解决长任务死假)

  delegate void RunTaskDelegate(int seconds);

  // 显示进度条的委托声明(跨线程调用控件)

  delegate void ShowProgressDelegate(int totalStep, int currentStep);

2、定义方法

  private void ShowProgress(int totalStep, int currentStep)

  {

    progressBar1.Maximum = totalStep;

    progressBar1.Value = currentStep;

  }

3、定义线程

  private void RunTask(int seconds)

  {

    ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);

    for (int i = 0; i < seconds * 4; i++)

    {

      Thread.Sleep(250);

      // 在基础窗口上调用显示进度条的委托

      this.Invoke(showProgress, new object[] { seconds * 4, i + 1 });

    }

  }

4、执行

  RunTaskDelegate runTask = new RunTaskDelegate(RunTask);

  // 异步调用执行任务的委托

  runTask.BeginInvoke(20, null, null);

来自:http://www.tansea.cn/article.asp?id=119