Где я могу найти хорошее консольное приложение C #, которое демонстрирует опрос? - PullRequest
2 голосов
/ 03 июня 2011

Я ищу хороший пример опроса в C #.

Обычно каждые X секунд инструмент считывается, а значения записываются в текстовый файл. Я искал образец, который использует параллельную библиотеку .NET 4. Или, может быть, я обдумываю это решение, глядя на TPL ...

ps- этот вопрос не связан с моим предыдущим вопросом об опросе базы данных.

Ответы [ 3 ]

4 голосов
/ 03 июня 2011

Я не уверен, что особенно беспокоюсь о TPL.Просто используйте System.Threading.Timer или System.Timers.Timer, чтобы периодически выполнять действие.Оба будут использовать пул потоков - что вы планируете делать в потоке основной консоли в это время?

Конечно, еще один простой способ - просто создать основной поток.спать между опросами.Это грубо, но если это все , которое требуется вашему приложению, оно вполне может быть достаточно для вас.Я не уверен, как он себя ведет, если системные часы меняются, заметьте ... это для очень длительной задачи для производственного использования или просто для быстрого инструмента?(Если это долго работающее приложение, вы можете вместо этого рассмотреть возможность использования службы Windows.)

2 голосов
/ 03 июня 2011

Создать таймер очень просто:

static void Main(string[] args)
{
    // Create a timer that polls once every 5 seconds
    var timer = new System.Threading.Timer(TimerProc, null, 5000, 5000);
    Console.WriteLine("Polling every 5 seconds.");
    Console.WriteLine("Press Enter when done:");
    Console.ReadLine();
    timer.Dispose();
}

static int TickCount = 0;
static void TimerProc(object state)
{
    ++TickCount;
    Console.WriteLine("tick {0}", TickCount);
}

Обратите внимание, что TimerProc вызывается в отдельном потоке. Ваша основная программа может делать другие вещи, и она будет продолжать опрос каждые пять секунд, пока вы не убьете (или не измените) таймер.

Я предпочитаю System.Threading.Timer, чем System.Timers.Timer, потому что последний проглатывает исключения. Если в обработчике прошедшего события есть ошибка, которая вызывает исключение, вы никогда не узнаете об этом, потому что обработчик события System.Timers.Timer подавит исключение. По этой причине я настоятельно рекомендую вам не использовать его. Вместо этого используйте System.Threading.Timer.

1 голос
/ 03 июня 2011

Использование PL не подходит для этой задачи.Я рекомендую проверить System.Timer , с помощью которого вы можете указать повторяющийся интервал, с которым в вашем приложении возникает событие Elapsed, позволяющее вам обрабатывать событие для выполнения регулярной обработки.

...