Эффективная реализация потоков в данном сценарии - PullRequest
0 голосов
/ 21 мая 2010

У меня есть приложение winforms, которое настроено следующим образом: 2 кнопки, текстовое поле, объект класса MX с коллекцией K в качестве члена, функция X и другая функция, Y.

  1. Функция X анализирует большую базу данных и перечисляет некоторые ее данные в коллекции K.
  2. Кнопка 1 вызывает функцию X.
  3. Функция Y просматривает вышеуказанную коллекцию и распечатывает данныев текстовом поле.
  4. Кнопка 2 вызывает функцию Y.

Я бы хотел вызвать функцию X через рабочий поток таким образом, чтобы:

  1. Форма остается чувствительной к пользовательскому вводу.По сути, это происходит из-за использования отдельного потока.
  2. В любой момент времени не может быть более одного экземпляра функции X.
  3. MX / K может быть доступен обеим функциямна все времена.

Что будет наиболее эффективной реализацией вышеуказанной среды?

1 Ответ

1 голос
/ 21 мая 2010

Когда вы нажимаете кнопку 1, вы можете вызвать X, используя BackgroundWorker, чтобы запустить его в отдельном потоке. Затем установите переменную (или неактивную кнопку 1), чтобы пользователь не мог снова запустить X.

X может записывать в свою собственную коллекцию во время обработки БД. Затем он может заменить переменную экземпляра этой коллекцией. Делая только одну замену, вы можете избежать проблем синхронизации между X и потоком пользовательского интерфейса.

После завершения X вы можете использовать событие BackgroundWorker, чтобы пользовательский интерфейс знал, что операция завершена. Затем вы сбрасываете ту же самую переменную (или отменяете кнопку), чтобы пользователь знал, что теперь он может снова запустить X - при необходимости.

Что ты думаешь? Это помогает вообще?

...