Проблемы с обновлением графического интерфейса пользователя из другой задачи с использованием async / await - PullRequest
0 голосов
/ 28 февраля 2019

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

Прежде всего я хочу объяснить в тексте, что делает моя программа vb.net:

  1. После запуска моего приложения сНа этой кнопке я запускаю средство просмотра файлов для файла сообщений о состоянии в MainForm и запускаю новый поток для вычисления моих тестовых данных.
  2. Этот поток инициирует класс, и в этом классе он также инициирует средство просмотра файлов.
  3. Когда тестовые данные создаются в контролируемой папке, поток анализирует мои данные и записывает их в базу данных.
  4. В рамках расчета и после записи в базу данных задача записывает некоторые сообщения о состоянии в файл сообщений о состоянии.
  5. Содержимое сообщений о состоянии должно отображаться в MainForm в текстовом поле и должно обновляться всегда, когда записывается новое состояние, так что самое новое состояние всегда находится над TextBox.Также о прогрессе необходимо сообщать MainForm, чтобы отображать его с помощью индикатора выполнения.
  6. Это повторяется до тех пор, пока в моей папке есть новые тестовые данные, другими словами, мое приложение - «пылесос для обработки данных», который высасывает все данные из отслеживаемого каталога, чтобы проанализировать и записать их вбаза данных.Если все данные в папке проанализированы и записаны в базу данных, она ожидает новых данных, и после того, как файловый наблюдатель запустил новое событие, задача снова начнет анализировать и записывать.Поэтому я не запускаю задачу всегда, когда у меня появляются новые данные.Задача запускается только тогда, когда я запускаю свое приложение.Все остальное выполняется событием filewatcher в рамках этой задачи.

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

Это мой код в основной форме:

Private Async Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click

        Await Task.Run(Sub() gFileWatcher.InitWatcher())

    End Sub

Как можно обновить TextBox в реальном времени, то есть после изменения статуса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...