C#如何在另一个线程中运行和处理表单?

时间:2010-08-20 09:42:36

标签: c# multithreading progress-bar

这是我的问题:我正在用C#制作产品上传模块(主窗体)。我从excell文件中读取数据,然后上传到数据库,然后我调整图像大小并通过FTP上传。一切正常。现在我想添加一个进度条。我已经创建了一个新表单,我添加了两个进度条,并为进度条提供了新值的公共方法,以及第三种方法,在完成时输出文本。如果我将它的实例放入主窗体中,它可以工作,但我正在进行硬操作(调整图像大小,上传到ftp),并且CPU无法跟踪进度条的变化速度。所以解决方案是在新线程中启动进度表单。我尝试了许多不同的方法,但没有成功。主要问题是我应该从主窗体中触发进度表的公共方法。

我以前从未在c#中创建过进度表,你能告诉我哪种方法最简单,最简单吗?

1 个答案:

答案 0 :(得分:1)

我想也许你最好在单独的线程中执行密集操作,然后将事件编组回到进度表单,以便向用户显示进度。

当你有单独的线程时,你不能只是从那些线程更新GUI。你应该看一下使用Invoke MSDN

此示例还显示了如何使用工作线程执行更密集任务的简单示例。

   private void Button_Click(object sender, EventArgs e)
  {
     myThread = new Thread(new ThreadStart(ThreadFunction));
     myThread.Start();
  }
  private void ThreadFunction()
  {
     MyThreadClass myThreadClassObject  = new MyThreadClass(this);
     myThreadClassObject.Run();
  }