Как предположил Бен Фойгт, BackgroundWorker
- это, вероятно, то, что вы должны использовать здесь, если у вас нет веских оснований хотеть использовать что-то еще.
«Эффективный» - довольно смутное средство сравнения. Не совсем понятно, что вы ищете в двух вариантах, которые вы рассматриваете.
BackgroundWorker
s просты и понятны, и они избегают использования таймеров.
Invoke
более эффективен, чем таймер, в том смысле, что будет меньше задержки между достижением bCheckState истины и обновлением текста. Он также будет менее ресурсоемким, поскольку у вас не будет опроса таймера через заданный интервал.
Timer
более эффективен в том смысле, что поток не должен останавливаться при вызове для обновления текста, но он немного неэффективен, потому что он будет тратить впустую время процессора, проверяя, изменился ли логический параметр, и также может быть задержка до интервала таймера, прежде чем форма изменится.
В качестве другой альтернативы, BeginInvoke
может использоваться для обновления формы без использования таймера и без необходимости в потоке, ожидающем завершения вызова. Тем не менее, если возникнет исключение, ваш поток может не выяснить, если вы не вызовете EndInvoke
, что также остановит выполнение потока до завершения вызова.
Все они имеют свои преимущества и недостатки, и вы не можете назвать какой-то конкретный более "эффективным" в целом.