C # Как запустить и обрабатывать форму в другом потоке? - PullRequest
1 голос
/ 20 августа 2010

Вот моя проблема: я делаю модуль загрузки продукта (основная форма) на C #.Я читаю данные из файлов Excell, затем загружаю их в базу данных, затем меняю размеры изображений и загружаю их по FTP.Все отлично работаетТеперь я хочу добавить индикатор выполнения.Я создал новую форму, добавил два индикатора выполнения и обнародовал методы для придания нового значения индикаторам выполнения, а также третий метод вывода текста после завершения.Если я помещаю его экземпляр в основную форму, он работает, но я выполняю сложные операции (изменение размера изображения, загрузка в ftp), и ЦП не может отслеживать индикатор выполнения так быстро, как он меняется.Таким образом, решением было бы запустить форму прогресса в новом потоке.Я пробовал много разных способов сделать это, но безуспешно.Основная проблема заключается в том, что я должен вызывать открытые методы формы прогресса из основной формы.

Я никогда не делал прогрессбары в c #, подскажите, пожалуйста, какой самый простой и простой способ сделать это

1 Ответ

1 голос
/ 20 августа 2010

Я думаю, что, возможно, вам лучше выполнить интенсивные действия в отдельном потоке, а затем перенаправить события обратно в форму прогресса, чтобы отобразить для пользователя прогресс.

Когда у вас есть отдельные потоки, вы не можете просто обновить 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();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...