Я делаю форму окна и хочу, чтобы задача аудита выполнялась каждые 30 секунд. Этот аудит, по сути, проверяет серию служб на удаленных компьютерах и сообщает о статусе в richtextbox.

Current У меня это работает в бесконечном фоновом потоке и с помощью средства вызова обновляет richtextbox в основной форме.

Это лучшая практика? Если бы я сделал бесконечный цикл в своей основной форме, который не позволял бы работать ни одной из моих кнопок, правильно?

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

Изменить: я изучил класс Timer и решил пойти с Системный таймер, так как он оказался лучше с более длительной функцией. Спасибо, что указали мне правильное направление.

c#
2
DTown 9 Апр 2010 в 22:57

2 ответа

Лучший ответ

Вам следует изучить класс таймера Windows Forms . Вам не нужен цикл в основной форме. Лучше использовать таймер для запуска событий, которые могут обрабатываться асинхронно в другом потоке.

4
Brian Lyttle 9 Апр 2010 в 22:59
Кажется, это то, что я ищу. Хотя есть один вопрос. Будет ли это блокировать пользовательский интерфейс во время выполнения функции таймера?
 – 
DTown
9 Апр 2010 в 23:07
Пользовательский интерфейс может быть заблокирован каждый раз, когда вы пытаетесь получить доступ к элементу управления из другого потока. Познакомьтесь со свойством InvokeRequired и посетите MethodInvoker csharper.net/blog/…
 – 
Brian Lyttle
10 Апр 2010 в 07:16

(Я предполагаю, что это приложение winform)

Вызов основного потока - это правильный путь. Но как насчет использования таймера вместо бесконечный цикл? Это дает вам больше контроля. И функция таймера будет выполняться в своем собственном потоке.

Хорошая практика - позволить длительной работе выполняться в фоновом потоке, чтобы основной поток мог работать с пользовательским интерфейсом.

1
Mikael Svenson 9 Апр 2010 в 23:03