Я разрабатываю программное обеспечение для сборщика данных, использующего Compact Framework.Таймер в CF не отмечает
Я делаю проверку для каждого метода, который я звоню, и я посчитаю время, которое этот метод принимает для выполнения. Если это время больше или равно 1 минуте, тогда я собираюсь выбросить исключение. У меня есть следующее:
public static TResult Call<TResult>(Func<TResult> closure)
{
int ellapsedSeconds = 0;
Timer timer = new Timer { Interval = 1000, Enabled = true };
timer.Tick += delegate
{
ellapsedSeconds++;
if (ellapsedSeconds < 60) return;
timer.Enabled = false;
throw new Exception(@"TimeOut Error Again!");
};
try
{
TResult result = closure.Invoke();
timer.Enabled = false;
return result;
}
catch (Exception)
{
timer.Enabled = false;
throw;
}
}
Я знаю, что есть другие способы проверки, но я не хочу менять это. Я разместил свой проблемный домен, чтобы вы были внутри этого, но настоящая проблема заключается в том, что Timer
не запускает события тика. Он не имеет метода расширения, называемого .Start()
или .Stop()
, как и для настольного приложения. И timer.Enabled = true;
не начинает галочкой. Посмотрите в:
Как я могу запустить таймер с компактной структурой?
Вы вообще блокируете нить пользовательского интерфейса? –
Таймер является локальным для метода. Вероятно, это GC'd, прежде чем он подумал о тикании, –
Это действительно локально для метода. Я не могу применять глобальный член, потому что это статический класс. –