none
Windows Forms: как правильно реализовать обработчик нажатия кнопки RRS feed

  • Вопрос

  • Пишу приложение, обрабатывающее данные.
    Функционал простой, надо считывать данные, обрабатывать их и заносить в базу.
    Интерфейс простой, одна кнопка, по нажатию данные читаются, обрабатываются и пишутся в базу.

    Одно нажатие должно приводить к серии операций по чтению. Например, 10 и более значений. Чтение, обработка и запись занимает много времени, если данных много, то до 10- 15 минут. В это время форма "висит", нет никакой реакции на мышь.

    Хочу "развесить" форму, сделать вывод промежуточных результатов в textLabel или statusStrip, чтобы было понятно, как и что обрабатывается в данный момент. Однако форма "не отвечает".

    Весь код по обработке данных реализован в обработчике нажатия кнопки. Думаю, это неправильно.

    Вопрос, как сделать правильно.

    Повторю, нажатие кнопки, по нему много действий. Хочу выводить промежуточные данные в форму. Как правильно реализовать?

    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 21:56 MSDN Forums consolidation (От:Разработка Windows-приложений)
    19 декабря 2009 г. 10:24

Ответы

Все ответы

  • Используй потоки. Есть отличная статья для введения в эту тему.
    • Предложено в качестве ответа creomobile 19 декабря 2009 г. 10:35
    • Помечено в качестве ответа GL88 21 декабря 2009 г. 14:53
    19 декабря 2009 г. 10:34
  • простейшее - вставь в особо трудоемких местах кода строчку

    Application.DoEvents()

    тогда в label и textbox будут выводиться значения (по крайней мере в моих прогах так)

    30 марта 2010 г. 16:53
  • DoEvents - не самое лучшее решение. Все приложение будет работать в одном потоке, и обработка данных будет останавливаться на время отрисовки. Т.е. на нормальной двухпроцессорной машине обработка получит только часть одного процессора.

    Есть BackgroundWorker/ThreadPool/Invoke, они позволяют разделить обработку и отрисовку/реакцию на события. Лучше сразу ровно написать, чем расставлять повсюду DoEvents.

    ЗЫ. какой древний топик выплыл....

    30 марта 2010 г. 18:37