У меня есть приложение winforms, которое я буду вызывать через планировщик задач для загрузки файлов и вставки их в базу данных. Однако непредсказуемо, когда файлы будут доступны, поэтому я использовал таймер (System.Windws.Forms.Timer
) для опроса файлов.
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
if (args != null && args.Length > 0)
{
Form1 f1 = new Form1();
if (f1.IsLive)
{
f1.OnLaunch(); // tests DB connection and reads and updates the expiry date list.
if (args[0] == "FullStats")
f1.FullStatsDataPump();
else if (args[0] == "OptionsStats")
{
f1.OptionsStatsTimer_Tick(null, null);
f1.OptionsStatsTimer.Start();
}
else if (args[0] == "OptionsTraded")
{
f1._optionsTradedTimer_Tick(null, null);
f1.OptionsTradedTimer.Start();
}
else
{
EmailManager.InvalidInputArgument(args[0]);
Application.Exit();
}
Application.Run();
}
}
В приведенном выше фрагменте кода OptionsTradedTimer
/ OptionsStatsTimer
опрашивают файлы, а затем запускают процессы, которые заканчиваются на Application.Exit()
. Это работает отлично, но потом застревает в бесконечном цикле сообщений. Я думал, что Application.Run()
будет вызываться сразу после первого срабатывания таймера, и поэтому, когда Application.Exit()
в конечном итоге будет вызвано, это завершит цикл сообщений. Но если я прохожу код, то после этого Application.Exit()
программа возвращается к timer.tick(), откуда она возникла, а затем переходит к Application.Run()
внизу. Application.Run()
внизу необходим, так как без него таймеры будут тикать только один раз, а затем приложение закроется.
Итак, как мне правильно указать приложению выйти? Или куда мне звонить Application.Run()
?