none
Как должна выглядмть правильная архитектура программы WindowsForm при обработке длинных циклов RRS feed

  • Вопрос

  • Делаю программу анализа данных. По ходу анализа промежуточные результаты выводятся на экран. Все хорошо, пока форма не потеряет фокус(например, пользователь стал что-то делать на компьютере). Вывод промежуточной информации прекращает отображаться.  Форма теряет связь с окружающим миром.

    Что можно сделать, чтобы форма восстановила связь с окружающим миром. Какова должна быть правильная внутренняя архитектура программы для подобных задач. Может быть длинные циклы выносить в отдельные потоки или что то другое?

    Подскажите, пожалуйста. Я не лентяй или двоешник. Просто образование получил больше 40 лет назад. Программировал. Во время перестройки чтобы выжить пришлось заняться другим делом. В 2009 в 62года начал изучение NET  практически с нуля.

    28 ноября 2014 г. 7:36

Ответы

  • Почитайте про BackgroundWorker.
    • Помечено в качестве ответа Miklv 28 ноября 2014 г. 10:15
    28 ноября 2014 г. 7:55
  • Давно не писал под ВинФормс, могу что - то не так написать.

    У бекграундворкера есть метод ReportProgress(int persentProgress, object userstate).

    Там, где делаете вычисления, надо периодически вызывать этот метод, передавая промежуточные данные в userstate.

    А в коде формы подписаться на backgroundWorker1_ProgressChanged, и там передавать userstate контролам

    • Помечено в качестве ответа Miklv 29 ноября 2014 г. 12:55
    29 ноября 2014 г. 7:29

Все ответы

  • Почитайте про BackgroundWorker.
    • Помечено в качестве ответа Miklv 28 ноября 2014 г. 10:15
    28 ноября 2014 г. 7:55
  • Большое спасибо за подсказку
    28 ноября 2014 г. 10:15
  • Извините, может быть я что-то неправильно понял, но как из BackgroundWorker отображать состояние обработки. Из процесса BackgroundWorker недоступна исходная форма.
    29 ноября 2014 г. 4:13
  • Давно не писал под ВинФормс, могу что - то не так написать.

    У бекграундворкера есть метод ReportProgress(int persentProgress, object userstate).

    Там, где делаете вычисления, надо периодически вызывать этот метод, передавая промежуточные данные в userstate.

    А в коде формы подписаться на backgroundWorker1_ProgressChanged, и там передавать userstate контролам

    • Помечено в качестве ответа Miklv 29 ноября 2014 г. 12:55
    29 ноября 2014 г. 7:29
  • Спасибо, это наверное то, что нужно. Сейчас попробую
    29 ноября 2014 г. 9:05