использование бесконечного цикла для создания программы автообновления - PullRequest
0 голосов
/ 13 июля 2010

Решено: Вы, ребята, лучшие!Я взял все содержимое goyouidiot_Click и превратил его в метод с именем displayResult, а затем:

 private void t1_TextChanged(object sender, EventArgs e)
       {
        displayResult();
       }

Как я не думал об этом раньше?LOL, THX

вот оригинальное messege:

Не один назад я создал небольшое программное обеспечение, которое рассчитывает среднее значение из 15 чисел.Код начинает выполняться при нажатии кнопки, но я хочу поместить этот код в бесконечный цикл, который запускается вместе с программой, поэтому ответ будет автоматически обновляться.это мой код:

private void goyouidiot_Click(object sender,

EventArgs e) {.,,,}

и те, кто не понял:

У меня 15 текстовых полей, и я хочу, чтобы метод запускался при изменении содержимого текстовых полей.

Ответы [ 4 ]

9 голосов
/ 13 июля 2010

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

Если ваши номера обновляются в текстовых полях, просто привяжите события TextChanged каждого из них к вашему goyouidiot_Click методу, который затем следует переименовать.

Редактировать

Как указывает Эрик в своем ответе, причина того, что эти события работают, заключается в том, что на самом деле существует бесконечный цикл в фоновом режиме для прослушивания изменений - насос сообщений Windows. Этот цикл запускается при вызове метода Run в приложении.

3 голосов
/ 13 июля 2010

Ваша интуиция о том, что бесконечный цикл должен быть задействован, верна. Но вы не хотите сами писать этот цикл; библиотека времени выполнения уже написала это для вас. То, о чем вы хотите прочитать, - это программирование на основе событий . Найдите хорошее введение, как, скажем,

http://www.c -sharpcorner.com / UploadFile / sksaha / EventsinNet11152005043514AM / EventsinNet.aspx

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

2 голосов
/ 13 июля 2010

Включение в бесконечный цикл может привести к истощению системы питания процессора, а это означает, что вам потребуется ввести паузу (Thread.Sleep).

Если вы используете паузу, вы также можете использовать Timer объект - есть форма Timer или основанная на потоке Timer (System.Windows.Forms, или System.Threading / System.Timers);

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

Таймер потока использует делегаты / пул потоков, тогда как таймер на основе форм помещает сообщения в насос сообщений - оба не гарантируют точность своих интервалов из-за накладных расходов в способе, которымгалочка создана.

0 голосов
/ 13 июля 2010

Если я правильно понимаю (вы хотите что-то обновлять каждые 15 минут в приложении Winform), то лучше использовать класс Timer , который будет периодически запускать ваш код.

РЕДАКТИРОВАТЬ: Если вы хотите выполнить некоторые вычисления при изменении текста в одном из текстовых полей, вы должны сделать это в обработчике событий для события TextChanged этих текстовых полей (вы хотите назначить один и тот же обработчик для каждого текстового поля)

...